Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Gelöschte Datei immer noch vorhanden? (https://www.delphipraxis.net/193408-geloeschte-datei-immer-noch-vorhanden.html)

sko1 27. Jul 2017 08:40

Gelöschte Datei immer noch vorhanden?
 
Hallo,

ich habe ein ganz komisches Verhalten:

Delphi-Quellcode:
          bild1 := 'c:\temp\pdf1.pdf';
          bild2 := 'c:\temp\pdf2.pdf';
          if TFile.Exists(bild2) then
            TFile.Delete(bild2);
          try
            TFile.Copy(bild, bild2);
          except
            showmessage(bild2 + ' wurde gelöscht, ist aber noch vorhanden !');
          end;
Bei mehrfachem schnellen Aufruf dieses Codeschnipsels kommt ab und zu die Messagebox!

Was ist denn da los und viel wichtiger, wie bekommt man das korrigiert?

Ciao
Stefan

nahpets 27. Jul 2017 09:08

AW: Gelöschte Datei immer noch vorhanden?
 
Liefert TFile.Delete keinen Rückgabewert, der Dir was zum Erfolg / Misserfolg des Löschens sagt?

Zuerst mal den abfragen.

EDIT:

Ok, habe mal unter http://docwiki.embarcadero.com/Libra...s.TFile.Delete geschaut, Delete ist 'ne Prozedur, also nix mit Rückgabewert.

Ist wohl anders als beim DeleteFile aus Delphi 7-Zeiten.

Das Try würd' ich etwas abwandeln:
Delphi-Quellcode:
try
  TFile.Copy(bild, bild2);
except
  on e : Exception do begin
    showmessage(e.Message + #13 + bild2 + ' wurde gelöscht, ist aber noch vorhanden !');
  end;
end;
Im Except-Block die gelieferte Fehlermeldung nicht auszuwerten, dafür aber die eigene, vermutete bzw. erwartete Fehlermeldung auszugeben, halte ich nicht zwingend für eine gute Idee. Man kann mit seiner Annahme richtig liegen, muss es aber nicht.

bcvs 27. Jul 2017 09:12

AW: Gelöschte Datei immer noch vorhanden?
 
Lass mal das try - except weg, damit du die Exception im Original angezeigt bekommst.

Uwe Raabe 27. Jul 2017 09:13

AW: Gelöschte Datei immer noch vorhanden?
 
Zitat:

Zitat von nahpets (Beitrag 1377564)
Liefert TFile.Delete keinen Rückgabewert, der Dir was zum Erfolg / Misserfolg des Löschens sagt?

Nein, denn TFile.Delete ist eine procedure. Es würde aber eine Exception ausgelöst, wenn das nicht klappen würde.

jaenicke 27. Jul 2017 09:14

AW: Gelöschte Datei immer noch vorhanden?
 
Das passierte bei Bildern ganz gerne mal, wenn der Windows Explorer noch ein Handle für die Vorschau offen hatte. Oder auch bei Virenscannern.
Eigentlich sollte das aber nicht mehr auftreten, denn seit Windows 8 kehrt die Funktion zum Löschen normalerweise erst zurück, wenn das Löschen nicht nur erfolgreich, sondern auch komplett abgeschlossen ist.

Warum löschst du eigentlich vorher und gibst nicht einfach als dritten Parameter an TFile.Copy True mit? Denn wenn du direkt angibst, dass die Zieldatei überschrieben werden soll, hast du doch den gleichen Effekt, nur ohne zusätzliches Löschen.

sko1 27. Jul 2017 09:28

AW: Gelöschte Datei immer noch vorhanden?
 
Vielen herzlichen Dank!
Der dritte Parameter war mir gar nicht bewusst, zumal die Codevervollständigung nur die Variante mit 2 Parametern anbietet!

Der gepostete Code war "Dummycode", ich fang schon die Exception richtig ab und da bekam ich eben "File already exists" zurück...

Das Problem sollte damit gelöst sein!

Ciao
Stefan

Bernhard Geyer 27. Jul 2017 10:16

AW: Gelöschte Datei immer noch vorhanden?
 
Zitat:

Zitat von jaenicke (Beitrag 1377568)
Das passierte bei Bildern ganz gerne mal, wenn der Windows Explorer noch ein Handle für die Vorschau offen hatte. Oder auch bei Virenscannern.

Würde ich auch sagen das oft der Virenscanner der schuldige

Zitat:

Zitat von jaenicke (Beitrag 1377568)
Eigentlich sollte das aber nicht mehr auftreten, denn seit Windows 8 kehrt die Funktion zum Löschen normalerweise erst zurück, wenn das Löschen nicht nur erfolgreich, sondern auch komplett abgeschlossen ist.

Eigentlich. Habe hier Win8.1 und auch öfter den Fall. Behelfe mich jetzt mit ein DeleteAndWaitAndRetry-Hilfsfunktion die ich an Problematischen Stellen einbaue.


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