Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Noch offene Dateileichen schliessen oder löschen? (https://www.delphipraxis.net/101296-noch-offene-dateileichen-schliessen-oder-loeschen.html)

Graffi 10. Okt 2007 22:25


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

Go2EITS 11. Okt 2007 05:17

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:
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;
Von User Hagen:
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;

Graffi 12. Okt 2007 00:01

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

hathor 12. Okt 2007 06:40

Re: Noch offene Dateileichen schliessen oder löschen?
 
Nimm Unlocker:

http://ccollomb.free.fr/unlocker/

Luckie 12. Okt 2007 08:11

Re: Noch offene Dateileichen schliessen oder löschen?
 
Zitat:

Zitat von Graffi
Keine Sorge, die Suche wird IMMER von mir benutzt.

http://www.delphipraxis.net/internal...light=unlocker
:zwinker:

DP-Maintenance 12. Okt 2007 10:35

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 05:37 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