![]() |
Noch offene Dateileichen schliessen oder löschen?
N'abend!
Wie ist es eigentlich möglich,(angeblich) noch geöffnet Dateien zu schliessen oder zu löschen? Meine Anwendung schreibt div. Temp-Dateien. Unter "extremem Stress" bleibt manchmal eine solche Datei kleben und soll dann z.B. beim nächsten Anwendungsstart umbenannt oder gelöscht werden (je nach Dateiinhalt). Probleme ist nur, ich bekomme die Dateien häufig als "offen / in Benutzung" gemeldet. :warn: Gruss, Graffi |
Re: Noch offene Dateileichen schliessen oder löschen?
Ich würde das Problem an der Wuzel packen: Nachsehen ob, die Datei noch offen ist und warten bis der Urheber seine Daten Zuende geschrieben hat, Stichwort FileInUse und ein Delayanfügen, wenn dem so ist. Und klappt es immer noch nicht, dann gibt es auch Threads hier, die mit "gesperrte Datei löschen" Dir weiterhelfen. Die Suchfunktion von der Delphipraxis beantwortet mittlerweile 70% aller Fragen. Diese sollte vor der Fragestellung Deine erste Wahl sein.
Sofort gefunden (von User Toms):
Delphi-Quellcode:
Von User Hagen:
function FileInUse(FileName: string): Boolean;
var hFileRes: HFILE; begin Result := False; if not FileExists(FileName) then Exit; hFileRes := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Result := (hFileRes = INVALID_HANDLE_VALUE); if not Result then CloseHandle(hFileRes); end;
Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWord(Milliseconds); while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; if Application.Terminated then Exit; Milliseconds := Tick - GetTickcount; end; finally CloseHandle(Event); end; end; |
Re: Noch offene Dateileichen schliessen oder löschen?
Keine Sorge, die Suche wird IMMER von mir benutzt.
Danke für deine Antwort, allerdings löst FileInUse nicht mein Problem. Es geht mir ja um das Schliessen von solchen "offenen" Dateien. Einziger Benutzer ist meine eigene Anwendung, weshalb auch Delay nichts bringt. Bei der Forensuche nach "gesperrte Datei löschen" komme ich übrigens nur auf diesen Threat. :wink: Gruss, Ralf |
Re: Noch offene Dateileichen schliessen oder löschen?
|
Re: Noch offene Dateileichen schliessen oder löschen?
Zitat:
![]() :zwinker: |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.
Delphi-Frage |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz