AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Noch offene Dateileichen schliessen oder löschen?

Noch offene Dateileichen schliessen oder löschen?

Ein Thema von Graffi · begonnen am 10. Okt 2007 · letzter Beitrag vom 12. Okt 2007
Antwort Antwort
Graffi

Registriert seit: 5. Apr 2007
Ort: Duisburg
28 Beiträge
 
Delphi 6 Enterprise
 
#1

Noch offene Dateileichen schliessen oder löschen?

  Alt 10. Okt 2007, 22:25
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.

Gruss, Graffi
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#2

Re: Noch offene Dateileichen schliessen oder löschen?

  Alt 11. Okt 2007, 05:17
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;
  Mit Zitat antworten Zitat
Graffi

Registriert seit: 5. Apr 2007
Ort: Duisburg
28 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Noch offene Dateileichen schliessen oder löschen?

  Alt 12. Okt 2007, 00:01
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.

Gruss,
Ralf
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

Re: Noch offene Dateileichen schliessen oder löschen?

  Alt 12. Okt 2007, 06:40
Nimm Unlocker:

http://ccollomb.free.fr/unlocker/
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Noch offene Dateileichen schliessen oder löschen?

  Alt 12. Okt 2007, 08:11
Zitat von Graffi:
Keine Sorge, die Suche wird IMMER von mir benutzt.
http://www.delphipraxis.net/internal...light=unlocker
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
12. Okt 2007, 10:35
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.
Delphi-Frage
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:10 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