![]() |
RenameFile: Fehlerbehandlung
Hallo zusammen,
bewußt habe ich einige Dateien schreibgeschützt. Beim Ausführen von RenameFile erscheint im Debugger auch schön folgende Meldung: Zitat:
Einer von vielen Versuchen sieht bei mir so aus:
Delphi-Quellcode:
Es erscheinen aber keine Fehlermeldungen aus dem Programm heraus... :gruebel:
...
if not RenameFile(........) then begin raise Exception.Create('Die Datei "Test.txt" konnte nicht umbenannt werden. Ursachen könnten Schreibschutz, Datei wird verwendet, oder fehlende Zugriffsrechte sein.'); ... Ich möchte, dass die Fehlermeldung wie sie im Debugger erscheint auch vom Programm erstellt wird (Zugriff verweigert). Wo ist mein Denkfehler oder seh' ich den Wald vor lauter Bäumen nicht? Schon mal Danke vorab! |
Re: RenameFile: Fehlerbehandlung
In der Online-Hilfe steht es so, wie du es hast:
![]()
Delphi-Quellcode:
Hast du vielleicht Exceptions global irgendwie unterdrückt o.ä.?
if not RenameFile(SaveDialog1.FileName, BackupName) then
raise Exception.Create('Unable to create backup file.'); Du kannst auch mal versuchen, dass Projekt neu erzeugen zu lassen. Das hat bei mir ab und zu die merkwürdigsten Fehler beseitigt, die man sich nicht erklären konnte. |
Re: RenameFile: Fehlerbehandlung
Was bringt das Ganze aber wenn der Aufruf von RenameFile die Exception wirfst? Wäre halt noch interessant, welcher Befehl den fehl schlägt.
|
Re: RenameFile: Fehlerbehandlung
Eigentlich sollte doch
![]() |
Re: RenameFile: Fehlerbehandlung
Hallo Matze,
danke für deine Antwort! Bin immer noch am Suchen... Deinen Rat das Projekt neu zu erzeugen hatte ich zuvor schon mal getan. Ich habe auch keine Fehler unterdrückt durch Compilerschalter wenn du das meinst. Andere Fehlermeldungen erscheinen, nur diese EFOpenError-Meldung nicht... :gruebel: Habe zwischenzeitlich von Embar..Dingens folgendes gefunden und probiert, funktioniert aber auch nicht:
Delphi-Quellcode:
Ratlose Grüße.
procedure TForm1.FormCreate(Sender: TObject);
begin Application.OnException := AppException; end; procedure TForm1.AppException(Sender: TObject; E: Exception); begin Application.ShowException(E); Application.Terminate; end; procedure TForm1.Button1Click(Sender: TObject); begin raise EPasswordInvalid.Create('Incorrect password entered'); end; //roter Kasten @ s.h.a.r.k ich lass in einer Schleife mehrere Dateien umbenennen und möchte dem Anwender auch jeweils eine Rückmeldung geben, welche Datei(en) nicht umbenant werden konnten. Jetzt erst festgestellt, da ich das zuvor ausgeschlossen hatte: RenameFile gibt mir True zurück! :gruebel: Warum das denn? // 2. roter Kasten (bin ich heute langsam) @ himitsu, SetLastError schau ich mir gleich mal an! |
Re: RenameFile: Fehlerbehandlung
Für dich natürlich GetLastError :zwinker:
Delphi-Quellcode:
if not RenameFile(...) then
ShowMessage(SysErrorMessage(GetLastError)); ![]() ![]() Wie gesagt, hier kannst/muß du dich an die Fehlerbehandlung für MoveFile halten.
Delphi-Quellcode:
function RenameFile(const OldName, NewName: string): Boolean;
begin Result := MoveFile(PChar(OldName), PChar(NewName)); end; |
Re: RenameFile: Fehlerbehandlung
Hallo himitsu,
danke für deine Antwort! Das Problem ist aber, dass mir RenmaFile() true zurück gibt, obwohl die Datei nicht umbenannt werden konnte. :gruebel: Der Debugger zeigt die Exception aber an. Ich werde heute Abend in einem neuen Projekt nachschauen wie sich dann dort RenameFile() verhält. |
Re: RenameFile: Fehlerbehandlung
Hast du vielleicht zufällig eine Unit in den uses mit eingebunden, die eine alternative Funktion RenameFile() enthält und fehlerhafterweise auch ein true zurückgibt, wenn es fehlschlägt?
Ist zwar recht unwahrscheinlich, aber man weiss ja nie... Probier den Aufruf doch mal mit SysUtils.RenameFile() oder check den Aufruf über CodeInsight. Edit: Zitat:
|
Re: RenameFile: Fehlerbehandlung
Schreibschutz schützt vor RenameFile nicht!
zumindestens unter XP und D7! Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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