AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RenameFile: Fehlerbehandlung

Ein Thema von juergen · begonnen am 27. Mai 2010 · letzter Beitrag vom 28. Mai 2010
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#1

RenameFile: Fehlerbehandlung

  Alt 27. Mai 2010, 22:04
Hallo zusammen,

bewußt habe ich einige Dateien schreibgeschützt. Beim Ausführen von RenameFile erscheint im Debugger auch schön folgende Meldung:
Zitat:
Erste Gelegenheit für Exception bei $75319617. Exception-Klasse EFOpenError mit Meldung 'Datei C:\_Test\Culcha Candela - Monsta.mp3 kann nicht geöffnet werden. Zugriff verweigert
'. Prozess Dateien_filtern_sortieren_suchen_abspielen_umbenne n.exe (2596)
Thread-Ende: Thread-ID: 2072. Prozess Dateien_filtern_sortieren_suchen_abspielen_umbenne n.exe (2596)
RenameFile gibt ja einen Rückgabewert ob das Umbenennen erfolgreich war oder nicht.
Einer von vielen Versuchen sieht bei mir so aus:
Delphi-Quellcode:
...
  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.');
...
Es erscheinen aber keine Fehlermeldungen aus dem Programm heraus...
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!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: RenameFile: Fehlerbehandlung

  Alt 27. Mai 2010, 22:21
In der Online-Hilfe steht es so, wie du es hast: Delphi-Referenz durchsuchenRenameFile

Delphi-Quellcode:
if not RenameFile(SaveDialog1.FileName, BackupName) then
  raise Exception.Create('Unable to create backup file.');
Hast du vielleicht Exceptions global irgendwie unterdrückt o.ä.?

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.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: RenameFile: Fehlerbehandlung

  Alt 27. Mai 2010, 22:42
Was bringt das Ganze aber wenn der Aufruf von RenameFile die Exception wirfst? Wäre halt noch interessant, welcher Befehl den fehl schlägt.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: RenameFile: Fehlerbehandlung

  Alt 27. Mai 2010, 22:51
Eigentlich sollte doch MSDN-Library durchsuchenMoveFile (die WinAPI direkt hinter RenameFile) keine Exceptions auslösen, sondern mit SetLastError arbeiten?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: RenameFile: Fehlerbehandlung

  Alt 27. Mai 2010, 23:05
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...
Habe zwischenzeitlich von Embar..Dingens folgendes gefunden und probiert, funktioniert aber auch nicht:
Delphi-Quellcode:
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;
Ratlose Grüße.

//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!
Warum das denn?

// 2. roter Kasten (bin ich heute langsam)
@ himitsu,
SetLastError schau ich mir gleich mal an!
Jürgen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: RenameFile: Fehlerbehandlung

  Alt 28. Mai 2010, 07:56
Für dich natürlich GetLastError

Delphi-Quellcode:
if not RenameFile(...) then
  ShowMessage(SysErrorMessage(GetLastError));
MSDN-Library durchsuchenGetLastError und eventuell noch Delphi-Referenz durchsuchenSysErrorMessage

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;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: RenameFile: Fehlerbehandlung

  Alt 28. Mai 2010, 13:24
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.
Der Debugger zeigt die Exception aber an.

Ich werde heute Abend in einem neuen Projekt nachschauen wie sich dann dort RenameFile() verhält.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#8

Re: RenameFile: Fehlerbehandlung

  Alt 28. Mai 2010, 13:56
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:
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.
Bei mir wirkt auch manchmal "Projekt -> Unit-Puffer löschen" Wunder...
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

Re: RenameFile: Fehlerbehandlung

  Alt 28. Mai 2010, 17:32
Schreibschutz schützt vor RenameFile nicht!
zumindestens unter XP und D7!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 19:53 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