AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi DeleteFile und die Datei ist immer noch da
Thema durchsuchen
Ansicht
Themen-Optionen

DeleteFile und die Datei ist immer noch da

Ein Thema von fs999 · begonnen am 30. Aug 2016 · letzter Beitrag vom 22. Sep 2016
Antwort Antwort
Benutzerbild von fs999
fs999

Registriert seit: 4. Dez 2006
Ort: Luxembourg
46 Beiträge
 
Delphi 10.3 Rio
 
#1

DeleteFile und die Datei ist immer noch da

  Alt 30. Aug 2016, 16:32
Hallo,

Mit ein Delphi 2006 geschriebenes Programm erstelle ich eine Datei im ProgramData Verzeichnis und lade die über eine Internetseite mit dem TEmbeddedWB.
Das erste mal ist alles in Ordnung, die Datei wird richtig auf der Internetseite angezeigt.
Doch wenn ich noch eine Datei (mit selben Namen) lösche, dann neu erstelle, bekomme ich keine Fehlermeldung aber auf die Internetseite wird immer die erste Datei geladen.
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.
Wenn das Programm läuft kann ich nicht diese Datei öffnen, sogar als Administrator komme ich nicht in den Eigenschaften an die Security ran...
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: DeleteFile und die Datei ist immer noch da

  Alt 30. Aug 2016, 16:41
Du hast wohl in deinem Programm noch ein exklusives Handle auf die Datei offen. Freest du deinen FileStream nach dem Erstellen auch korrekt?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von fs999
fs999

Registriert seit: 4. Dez 2006
Ort: Luxembourg
46 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: DeleteFile und die Datei ist immer noch da

  Alt 30. Aug 2016, 16:47
Ja mit fs.Free;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: DeleteFile und die Datei ist immer noch da

  Alt 30. Aug 2016, 22:08
Fehlerbehandlung irgendwie?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: DeleteFile und die Datei ist immer noch da

  Alt 30. Aug 2016, 22:38
Der TEmbeddedWB kapselt doch den IE und der guckt erstmal in den Cache. Könnte es sein, dass Du deshalb nicht die veränderte Seite zu sehen bekommst?

Nach 'nem Programmneustart weiß der dann nicht mehr, dass er die Datei schonmal angezeigt hat, zeigt sie daher neu an, wozu er die aktuelle Datei nutzt.

Wäre zumindest mal 'ne Prüfung wert, ob da so ein Effekt vorhanden sein könnte.
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#6

AW: DeleteFile und die Datei ist immer noch da

  Alt 31. Aug 2016, 07:23
Delphi-Quellcode:
procedure TForm.ButtonClick(Sender: TObject);
var Flags: OLEVariant;

begin
  Flags:=4; //NavNoReadFromCache
  WebBrowser1.Navigate('http://www.xxxxx.com/', Flags);
end;

Geändert von t.roller (31. Aug 2016 um 07:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von fs999
fs999

Registriert seit: 4. Dez 2006
Ort: Luxembourg
46 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: DeleteFile und die Datei ist immer noch da

  Alt 31. Aug 2016, 08:00
Fehlerbehandlung irgendwie?
Keine Fehler.
Der TEmbeddedWB kapselt doch den IE und der guckt erstmal in den Cache. Könnte es sein, dass Du deshalb nicht die veränderte Seite zu sehen bekommst?
Es ist nicht auf der Internetseite wo ich das sehe, aber im Windows Explorer. Und die Internetseite uploaded die Datei ja, sie kann nicht im Cache sein.

Ich habe vergessen zu sagen dass das nur auf Windows 10 vorkommt, nicht auf Windows 7.
Ist es möglich dass das Programm in eine Virtual Machine läuft ohne das man es weiß ?

Geändert von fs999 (31. Aug 2016 um 08:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: DeleteFile und die Datei ist immer noch da

  Alt 22. Sep 2016, 16:25
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 MSDN-Library durchsuchenFILE_DISPOSITION_INFORMATION mittels MSDN-Library durchsuchenZwSetInformationFile(hFile, ..., FileDispositionInformation, ...). Die Datei wird also zum Löschen vorgemerkt.

Und du darfst dir die Win32-API MSDN-Library durchsuchenDeleteFile 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 MSDN-Library durchsuchenCreateFile 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.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  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 02:43 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