C++ Builder Snippets  

Verzeichnisse verschieben/kopieren:
 
//---------------------------------------------------------------------------
// 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
}
//---------------------------------------------------------------------------



© '99-2002 by S. Kreutzmann