Zacherl hat schon recht. Ich würde auch auf ein offenes
Handle tippen.
Erst wenn ich das Programm schließe verschwindet die Datei.
Was komisch ist DeleteFile('name') gibt True zurück und TFileStream.Create('name', fmCreate) meldet kein Fehler.
Schonmal im Process Explorer oder gar mit ProcMon nachgeschaut? Da schwirrt mit ziemlicher Sicherheit noch irgendwo ein
Handle auf die Datei rum. Ich behaupte ja nicht, daß es in deinem Prozeß ist, aber der Process Explorer könnte dies ohne weiteres aufdecken, so oder so.
Normalerweise ist das vermeintliche sofortige Löschen einer Datei ja erstmal nichts anders als das Setzen von DeleteFile in
FILE_DISPOSITION_INFORMATION mittels
ZwSetInformationFile(hFile, ..., FileDispositionInformation, ...). Die Datei wird also
zum Löschen vorgemerkt.
Und du darfst dir die
Win32-
API DeleteFile als Hülle für den oben genannten Mechanismus vorstellen. Wenn du also eine Datei zum Löschen markierst, wird diese weiterexistieren, bis das letzte
Handle weg ist:
Zitat:
A file marked for deletion is not actually deleted until all open handles for the file object have been closed and the link count for the file is zero.
Auf unixartigen Systemen ist dies übrigens ganz ähnlich, auch wenn die Datei aus dem Ursprungsverzeichnis
sofort verschwindet. Mithilfe des /proc-Dateisystems kann man die Datei "wiederherstellen" indem man sie aus /proc wieder "herauskopiert", siehe
hier.
Wenn das Programm läuft kann ich nicht diese Datei öffnen, sogar als Administrator komme ich nicht in den Eigenschaften an die Security ran...
Ich empfehle die Lektüre von
CreateFile und dort im Besonderen von dwShareMode
Übrigens könntest du als Admin mit dem aktivierten Backupprivileg doch Glück haben. Aber ist nur so eine Idee, hab's nicht getestet.