//---------------------------------------------------------------------------
// Folgende Funktion verschiebt Verzeichnisse inklusive der
// Unterverzeichnisse und Dateien
//---------------------------------------------------------------------------
// Hinweis: durch die Änderung des Datenelementes wFunc in der Struktur
// SHFILEOPSTRUCT von FO_MOVE in FO_COPY kann die Funktion
// zum Kopieren der Verzeichnisse/Dateien benutzt werden
//---------------------------------------------------------------------------
//
// Argumente: Name des Quellverzeichnisses, Name des Zielverzeichnisses
// Rückgabewert: 0 falls Ausführung erfolgreich, ansonsten !=0
//---------------------------------------------------------------------------
// Anwendungsbeispiele:
// 1. Verschiebt das Verzeichnis d:\test samt Inhalt in Verzeichnis e:\temp
// (falls Zeilverzeichnis nicht existiert, wird ein neues angelegt)
if(!MoveFiles("d:\\test", "e:\\temp"))
ShowMessage("Ausführung erfolgreich !");
else ShowMessage("Fehler aufgetreten !");
// 2. Verschiebt alle Dateien und Unterverzeichnisse aus dem Verzeichnis
// d:\test in Verzeichnis e:\temp (das Zielverzeichnis muss existieren)
if(!MoveFiles("d:\\test\\*.*", "e:\\temp\\"))
ShowMessage("Ausführung erfolgreich !");
else ShowMessage("Fehler aufgetreten !");
// 2. Verschiebt alle Dateien mit der Erweiterung "TXT" aus dem Verzeichnis
// d:\test in Verzeichnis e:\temp (das Zielverzeichnis muss existieren)
if(!MoveFiles("d:\\test\\*.txt", "e:\\temp\\"))
ShowMessage("Ausführung erfolgreich !");
else ShowMessage("Fehler aufgetreten !");
//---------------------------------------------------------------------------
int MoveFiles(AnsiString slSourceDir, AnsiString slTargetDir)
{
SHFILEOPSTRUCT sh;
ZeroMemory(&sh, sizeof(sh));
// Folgendes Datenelemnt der Struktur ist eigentlich für das
// Handle des aufrufenden Fensters vogesehen, also z.B.:
// sh.hwnd = Form1->Handle. Allerdings gibt Windows in diesem Fall
// die Fehlermeldungen in einer Messagebox aus, was bei Anwendungen,
// die ohne Benutzer-Interaktion laufen müssen, oft unerwünscht ist.
// (z.B. Datenlogger, Processüberwachung etc.) Um diese Fehler-
// meldungen zu unterbinden, muss das Fenster-Handle auf 0 gesetzt werden:
sh.hwnd = NULL;
// Rückfragen und Animation ausschalten: (wird dieses Flag nicht gesetzt,
// entspricht das Verhalten der Funktion dem von Windows-Explorer beim
// Verschieben eines Verzeichnisses: es werden also Sicherheits-Abfragen
// durchgeführt und die "flying folders"-Animation angezeigt.
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_FILESONLY;
sh.wFunc = FO_MOVE; // Durchzuführende Operation
slSourceDir+='\0'; // doppelte Nullterminierung
// erforderlich !
sh.pFrom = slSourceDir.c_str();
slTargetDir+='\0'; // doppelte Nullterminierung
// erforderlich !
sh.pTo = slTargetDir.c_str();
sh.hNameMappings = NULL;
sh.lpszProgressTitle = NULL;
return SHFileOperation (&sh); // Aktion durchführen
}
//---------------------------------------------------------------------------
|