AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SHFileOperation verursacht einen ERangeError
Thema durchsuchen
Ansicht
Themen-Optionen

SHFileOperation verursacht einen ERangeError

Ein Thema von WladiD · begonnen am 1. Feb 2006 · letzter Beitrag vom 2. Feb 2006
Antwort Antwort
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
135 Beiträge
 
Delphi 10.4 Sydney
 
#1

SHFileOperation verursacht einen ERangeError

  Alt 1. Feb 2006, 08:31
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
Waldemar Derr
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: SHFileOperation verursacht einen ERangeError

  Alt 1. Feb 2006, 09:50
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
  Mit Zitat antworten Zitat
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
135 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: SHFileOperation verursacht einen ERangeError

  Alt 1. Feb 2006, 10:03
Zitat von marabu:
Kannst du deine Testbedingungen genauer beschreiben?
Tja was sind jetzt die Testbedingungen?

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
Waldemar Derr
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: SHFileOperation verursacht einen ERangeError

  Alt 1. Feb 2006, 11:17
Ich habe ein wenig getestet und dabei folgende Änderungen an der Funktion für gut befunden:

Delphi-Quellcode:
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;
Deine Fehlermeldung habe ich nicht reproduzieren können. Zum Testen habe ich einen Button mit der Standard FileOpen Action verwendet:

Delphi-Quellcode:
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;
Vielleicht möchtest du das bei dir nachvollziehen?

marabu
  Mit Zitat antworten Zitat
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
135 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: SHFileOperation verursacht einen ERangeError

  Alt 1. Feb 2006, 11:32
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!
Waldemar Derr
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: SHFileOperation verursacht einen ERangeError

  Alt 1. Feb 2006, 16:27
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]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#7

Re: SHFileOperation verursacht einen ERangeError

  Alt 1. Feb 2006, 17:03
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
Mario
  Mit Zitat antworten Zitat
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
135 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: SHFileOperation verursacht einen ERangeError

  Alt 2. Feb 2006, 08:53
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!
Waldemar Derr
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz