Delphi bietet viele Funktionen für Dateioperationen, darunter das Erstellen und Löschen von Verzeichnissen, das Festlegen des aktuellen Verzeichnisses, das Abrufen des aktuellen Verzeichnisses usw. Das Löschen von Verzeichnissen umfasst die Funktion (Function) RemoveDir und die Prozedur (PRocedure) RmDir, sie können jedoch nur leere Verzeichnisse und keine nicht leeren Verzeichnisse löschen. Um den gesamten Verzeichnisbaum (DelTree) zu löschen, müssen Sie ein Programm schreiben, um die darin enthaltenen Unterverzeichnisse und Dateien zu löschen.
Dateien im Verzeichnis können durch Aufrufen der Funktion „DeleteFile“ gelöscht werden, spezielle Dateien (schreibgeschützt, System, versteckt usw.) können jedoch nicht effektiv gelöscht werden. Die Dateiattribute müssen in normale Dateien geändert werden, bevor sie gelöscht werden können. Mit der Funktion FileSetAttr können Sie Dateiattribute ändern. Dabei werden die Attribute der speziellen Datei auf normale Dateiattribute gesetzt (der Attributwert ist 0).
Da die Baumverzeichnisstruktur am besten für rekursive Methoden geeignet ist, werden hier rekursive Algorithmen verwendet, um die DelTree-Funktion zu implementieren. Das Folgende ist das spezifische Implementierungsverfahren.
//path ist der zu löschende Verzeichnispfad
//Gibt „True“ zurück, wenn das Verzeichnis erfolgreich gelöscht wurde, andernfalls wird „False“ zurückgegeben
Funktion TForm1.Deltree (Pfad: Zeichenfolge): Boolean;
var
SearchRec: TSearchRec;
beginnen
//Bestimmen Sie, ob das Verzeichnis existiert
wenn DirectoryExists(path), dann
beginnen
//Geben Sie das Verzeichnis ein und löschen Sie die darin enthaltenen Unterverzeichnisse und Dateien
oldDir := GetCurrentDir;
ChDir(Pfad);
//Alle Dateien im Verzeichnis finden
FindFirst(′??.??′, faAnyFile, SearchRec);
wiederholen
//Dateiattribute in normale Attributwerte ändern
FileSetAttr(SearchRec.Name,0);
//Wenn es sich um ein Verzeichnis und nicht um .. handelt, rufen Sie DelTree rekursiv auf
if(SearchRec.Attr und faDirectory > 0) then
beginnen
if(SearchRec.Name[1]<>′.′) then
if(not Deltree(SearchRec.Name)) then
brechen;
Ende
//Wenn es sich um eine Datei handelt, löschen Sie sie direkt
anders
if(not DeleteFile(SearchRec.Name))then
brechen ;
//Suche bis zum Ende weiter
bis (FindNext(SearchRec)<>0) ;
//Gehe zurück zum übergeordneten Verzeichnis und lösche das Verzeichnis
ChDir(′..′);
Ergebnis := ReMoveDir(path);
SetCurrentDir(oldDir);
Ende
anders
Ergebnis := Falsch ;
Ende ;
Dieses Programm wird unter Windows 98 und Delphi 4.0 kompiliert und weitergegeben.