Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Datei kann nicht gelöscht werden (https://www.delphipraxis.net/145684-datei-kann-nicht-geloescht-werden.html)

Mysterio08 6. Jan 2010 09:47


Datei kann nicht gelöscht werden
 
Guten Morgen,
ich habe ein sehr triviales Problem, bin gerade aber nicht in der Lage, es selber zu lösen...
Und zwar erstelle ich eine Datei, in der ein FileStream gespeichert wird. Mit ExtractFilePath(ParamStr(0)) bestimme ich das Verzeichnis und speichere es in eine Variable, die Datei wird folgedem auch an dem Ort abgespeichert, in dem ich das möchte.
Da es ein FileStream ist, gibt es ja Probleme, wenn nichts abgespeichert wurde, deswegen prüfe ich, die Dateigröße und möchte die Datei ggf. löschen. Der Code dazu sieht wie folgt aus:
Delphi-Quellcode:
  Verzeichnis := ExtractFilePath(ParamStr(0)) + 'Data.fs';
  if Stream.Size = 0 then DeleteFile(Verzeichnis)
Das klappt nun aber nicht und ich weiß nicht, wieso.
mfg.

mkinzler 6. Jan 2010 09:51

Re: Datei kann nicht gelöscht werden
 
Hast du im Verzeichnis entsprechende Rechte?
Ist die datei, welche du löschen willst geöffnet?

Luckie 6. Jan 2010 11:13

Re: Datei kann nicht gelöscht werden
 
So lange das FileStream Objekt noch existiert, ist die Datei noch geöffnet. Gib das FileStream Objekt vor dem löschen frei. Und es wäre auch keine dumme Idee den Rückgabewert von DeleteFile zu überprüfen und bei einem Fehler GetLastError aufzurufen.

hoika 6. Jan 2010 12:51

Re: Datei kann nicht gelöscht werden
 
Hallo,

was mir am Code ein bissel missfällt.

DeleteFile(Verzeichnis)

Ich denke, du löscht eine Datei ?

Ich meine nur, dass der Variablenname etwas ungünstig gewählt ist.


Heiko

Mysterio08 6. Jan 2010 13:06

Re: Datei kann nicht gelöscht werden
 
Zitat:

Zitat von hoika
Ich denke, du löscht eine Datei ?

Ich meine nur, dass der Variablenname etwas ungünstig gewählt ist.

Da gebe ich dir Recht; ich benutze eine global deklarierte Variable für das Verzeichnis, ich sollte besser zwei Lokale deklarieren, und dann die der Prozedur zum Löschen auch dementsprechend benennen. Das werde ich gleich vornehmen.

Soweit hat es jetzt aber geklappt, ich geben erst den FileStream frei, und dann klappt das mit dem Löschen auch logischerweise.

Eine Frage aber noch mal zu GetLastError:
Ich habe jetzt in der Delphi-Hilfe folgende Beschreibung gefunden:
Zitat:

GetLastError gibt den letzten Fehler zurück, der von einem API-Aufruf in das Betriebssystem gemeldet wurde. Der Aufruf dieser Funktion setzt in der Regel den Fehlerstatus des Betriebssystems zurück.
Was genau bringt mir diese Funktion außer eine Fehlerbeschreibung (die ist ja für den zukünftigen Nutzer uninteressant, oder?)? Da DeleteFile ja eine Funktion ist kann ich doch auch deren Rückgabewert überprüfen/bearbeiten.

Medium 6. Jan 2010 13:12

Re: Datei kann nicht gelöscht werden
 
Stimmt, dem Benutzer kann es ja völlig egal sein was genau und warum/wo nicht geklappt hat was er tun wollte, und zum Debuggen ist das im Grunde auch völlig wertlos. :stupid:

Luckie 6. Jan 2010 13:15

Re: Datei kann nicht gelöscht werden
 
Mach mal folgendes:
Delphi-Quellcode:
if not DeleteFile(c:\xyz.abc) then
  ShowMessage(SysErrorMessage(GetLastError));
Und im Gegensatz dazu:
Delphi-Quellcode:
if not DeleteFile(c:\xyz.abc) then
  ShowMessage('Fehler');
Wobei Datei xyz.abc nicht existiert.

Und jetzt sag mir, was dir und dem Anwender nachher wohl mehr hilft. Dir um zu sehen, was der Grund für ein Fehler ist und dem Benutzer, dass ein Fehler aufgetreten ist und warum.

Sonst macht ihr euch doch immer über so nichtssagende oder unsinnige Fehlermeldungen von Windows lustig. Aber besser machen wollt ihr es irgendwie auch nicht. Fast bei jedem Beitrag, wo es heißt "funktioniert nicht", fehlt die Fehlerbehandlung, die einem von alleine auf den Fehlergrund aufmerksam und eine Posting überflüssig gemacht hätte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 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