Hallo DelphiPraxis-Community,
ich habe irgendwo den folgenden Code ergoogelt um komplette Verzeichnisse (rekursiv) löschen zu können...
Delphi-Quellcode:
function DeleteFile(const AFile: string): boolean;
//Löscht Dateien. Kann auch ganze Verzeichnisse inkl. Unterverz. mit Dateien
//löschen
var
sh: SHFileOpStruct;
begin
ZeroMemory(@sh, sizeof(sh));
with sh do
begin
Wnd := Application.Handle;
wFunc := fo_Delete;
pFrom := PChar(AFile + #0 + #0);
fFlags := fof_Silent or fof_NoConfirmation;
end;
Result:=SHFileOperation(sh) = 0;
end;
funktioniert auch wunderbar mit kleinem Schönheitsfehler:
In der Zeile
Result:=SHFileOperation(sh) = 0;
wird die
Exception ERangeError ausgelöst aber auch nur wenn der Debugger läuft. Die Dateien/Verzeichnisse werden aber richtig gelöscht. Wird das Programm standalone ausgeführt kommt keine
Exception.
Ich dachte zuerst es liegt am Rückgabewert der Funktion die einen Wert grösser als MaxInt oder kleiner als MinInt zurückliefert. Dem sei nicht so...sprich die
Exception kommt auch wenn die Funktion ohne Vergleich angegeben wird.
Klar könnte ich die
Exception vom Debugger ausschliessen lassen, aber das will ich nicht.
Hat jemand eine Ahnung warum die
Exception ausgelöst wird?
Verwende Delphi 7.
mfg