![]() |
SHFileOperation verursacht einen ERangeError
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
Delphi-Quellcode:
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.
Result:=SHFileOperation(sh) = 0;
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 |
Re: SHFileOperation verursacht einen ERangeError
Herzlich willkommen in der Delphi-PRAXiS.
Ich habe den Code in der IDE ausprobiert - eine Datei gelöscht - und es ist kein Fehler aufgetreten. Kannst du deine Testbedingungen genauer beschreiben? Freundliche Grüße vom marabu |
Re: SHFileOperation verursacht einen ERangeError
Zitat:
Verwende Delphi 7. Die Exception ERangeError wird vom Debugger nicht ausgeschlossen. Die Funktion löscht einen Temp-Ordner der in den Lokalen-Einstellungen beim Start erzeugt wird und beim beenden des Programms wieder vollständig gelöscht werden soll. In meinem Fall ist der Pfad: C:\Dokumente und Einstellungen\Besitzer.NAME-C7OCY7D8TR\Lokale Einstellungen\Temp\MyApp Zu lang ist das ja nich...oder? Wie gesagt, die Dateien und der Ordner werden korrekt gelöscht. mfg |
Re: SHFileOperation verursacht einen ERangeError
Ich habe ein wenig getestet und dabei folgende Änderungen an der Funktion für gut befunden:
Delphi-Quellcode:
Deine Fehlermeldung habe ich nicht reproduzieren können. Zum Testen habe ich einen Button mit der Standard FileOpen Action verwendet:
function ShellDeleteFile(const fsoName: string): Integer;
var sh: SHFileOpStruct; iResult: Integer; begin ZeroMemory(@sh, sizeof(sh)); with sh do begin wFunc := fo_Delete; pFrom := PChar(fsoName + #0 + #0); fFlags := fof_Silent or fof_NoConfirmation or fof_NoErrorUI; end; Result := SHFileOperation(sh); end;
Delphi-Quellcode:
Vielleicht möchtest du das bei dir nachvollziehen?
procedure TTestForm.FileDeleteAccept(Sender: TObject);
var iResult: Integer; begin with FileDelete.Dialog do begin if cbFolder.Checked then iResult := ShellDeleteFile(ExtractFileDir(FileName)) else iResult := ShellDeleteFile(FileName); ShowMessage(SysErrorMessage(iResult)); end; end; marabu |
Re: SHFileOperation verursacht einen ERangeError
Habs ausprobiert...immernoch dieselbe Exception von Delphi! Es ist kein Fehler von SHFileOperation, dementsprechend ist auch die ShowMessage leer.
Ich weiss auch net mehr weiter. Danke für die Hilfe! |
Re: SHFileOperation verursacht einen ERangeError
Moin WladiD,
schau Dir doch mal den Aufruf von SHFileOperation im CPU-Fenster an. Dann solltest Du genau sehen können, ob der Fehler nun vom Aufruf der Funktion oder innerhalb des Programmes aufgerufen wird. Ich tippe mal auf das Programm, denn der Fehler deutet nicht gerade auf einen Shell-Fehler hin. [EDIT] Das einzige ungewöhnliche, was mir aufgefallen ist: Du beendest die pFrom-Liste mit drei #0 (zweimal explizit, einmal intern), obwohl zwei genügen. Zugegeben, das dürfte nichts ausmachen, zumal bei marabu auch keine Exception aufgetretetn ist, aber wer weiss ;-) [/EDIT] |
Re: SHFileOperation verursacht einen ERangeError
Nabend :) ...,
am Namen der Function "DeleteFile" liegt es nicht, oder? Dachte immer das Delphi eine Function mit selbigen Namen bereits bereitstellt. Kann das im Mom. allerdings net testen, da ich net daheim bin. Wäre zumindest meine Vermutung!! Gruss Mario :dancer: |
Re: SHFileOperation verursacht einen ERangeError
Was mich stutzig macht ist die Tatsache, dass die ERangeError-Exception -laut Delphi-Hilfe- nur ausgelöst werden kann, wenn {$RANGECHECKS ON}/{$R+} aktiviert wird. Das ist aber nicht der Fall!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz