C++ Builder Snippets  

Verzeichnisse samt Inhalt löschen:
 
//---------------------------------------------------------------------------
// Folgende Funktion löscht ein Verzeichnis inklusive der Unterverzeichnisse
// und Dateien (auch schreibgeschützten)
//
// Argument:      Verzeichnisname als AnsiString
// Rückgabewert:  0 falls Ausführung erfolgreich, ansonsten !=0
//---------------------------------------------------------------------------
// Anwendungsbeispiele: 
// 1. Löschen des Verzeichnisses d:\test ikl. aller Dateien und 
//    Unterverzeichnisse:
if(!KillDirectory("d:\\test")) ShowMessage("Ausführung erfolgreich !");
else ShowMessage("Fehler aufgetreten !");
// 2. Löschen aller Dateien und Unterverzeichnisse im Verzeichnis 
//    d:\test (das Vezeichnis selbst bleibt erhalten)
if(!KillDirectory("d:\\test\\*")) ShowMessage("Ausführung erfolgreich !");
else ShowMessage("Fehler aufgetreten !");
// 3. Löschen aller Dateien mit der Erweiterung "TMP" im Verzeichnis 
//    d:\test (Achtung ! Eventuell existierende Unterverzeichnisse mit der
//    Endung ".TMP" werden in diesem Fall auch gelöscht !)
if(!KillDirectory("d:\\test\\*.tmp")) ShowMessage("Ausführung erfolgreich !");
else ShowMessage("Fehler aufgetreten !");
//---------------------------------------------------------------------------

int KillDirectory(AnsiString slDirName)
{
  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
  // Entfernen eines Verzeichnisses: es werden also Sicherheits-Abfragen
  // durchgeführt und die "flying files"-Animation angezeigt.
  sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;

  sh.wFunc = FO_DELETE;                 // Durchzuführende Operation
  slDirName+='\0';      // doppelte Nullterminierung erforderlich !
  sh.pFrom = slDirName.c_str();         // Verzeichnis-Name
  sh.pTo = NULL;
  sh.hNameMappings = NULL;
  sh.lpszProgressTitle = NULL;
  return SHFileOperation (&sh);         // Löschen durchführen
}




© '99-2000 by S. Kreutzmann