Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DeleteFile und die Datei ist immer noch da (https://www.delphipraxis.net/190101-deletefile-und-die-datei-ist-immer-noch-da.html)

fs999 30. Aug 2016 16:32


DeleteFile und die Datei ist immer noch da
 
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...

Zacherl 30. Aug 2016 16:41

AW: DeleteFile und die Datei ist immer noch da
 
Du hast wohl in deinem Programm noch ein exklusives Handle auf die Datei offen. Freest du deinen FileStream nach dem Erstellen auch korrekt?

fs999 30. Aug 2016 16:47

AW: DeleteFile und die Datei ist immer noch da
 
Ja mit fs.Free;

Luckie 30. Aug 2016 22:08

AW: DeleteFile und die Datei ist immer noch da
 
Fehlerbehandlung irgendwie?

nahpets 30. Aug 2016 22:38

AW: DeleteFile und die Datei ist immer noch da
 
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.

t.roller 31. Aug 2016 07:23

AW: DeleteFile und die Datei ist immer noch da
 
Delphi-Quellcode:
procedure TForm.ButtonClick(Sender: TObject);
var Flags: OLEVariant;

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

fs999 31. Aug 2016 08:00

AW: DeleteFile und die Datei ist immer noch da
 
Zitat:

Zitat von Luckie (Beitrag 1346250)
Fehlerbehandlung irgendwie?

Keine Fehler.
Zitat:

Zitat von nahpets (Beitrag 1346255)
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ß ?

Luckie 31. Aug 2016 10:05

AW: DeleteFile und die Datei ist immer noch da
 
Ich wollte wissen, ob du eine Fehlerbehandlung in deinem Code hast. Zum Beispiel ob der Rückgabewert von 8i]delteFile[/i] geprüft wird und wenn es fehlschlägt, was als Fehlermeldung ausgegeben wird.

Pixel 31. Aug 2016 11:34

AW: DeleteFile und die Datei ist immer noch da
 
Also um das was Luckie gefragt hat nochmals zu verdeutlichen:

Delphi-Quellcode:
procedure checkErrorDeleteFile(const path : string);
begin
  SetLastError(0);
  DeleteFile(path);
  ShowMessage(IntToStr(GetLastError));
end;
Anschließend kannst du hier nach dem Errorcode der in der Messagebox angezeigt wurde suchen, dann weißt du was das Problem ist in der Regel.

himitsu 31. Aug 2016 11:47

AW: DeleteFile und die Datei ist immer noch da
 
Ähhhhh, FALSCH und FALSCH.

siehe MSDN-Library durchsuchenDeleteFile

Delphi-Quellcode:
procedure checkErrorDeleteFile(const path : string);
begin
  //SetLastError(0); // das heißt LAST-Error und nicht THIS-Error
  is not DeleteFile(PChar(path)) then // rate mal, warum der Wert von GetLASTError nur "definitert" ist, wenn es einen Fehler gab :roll:
    //ShowMessage(IntToStr(GetLastError)); //ShorMessage als Fehlerbehandlung?
    RaiseLastOSError; // aka raise Exception.Create(SysErrorMessage(GetLastError));
end;
Sorry, es gibt zwar viele Wege, um nach Rom zu kommen, aber man sollte niemals nach links gehn, wenn dort ein Schild "rechts" steht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 Uhr.
Seite 1 von 2  1 2      

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