Einzelnen Beitrag anzeigen

HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#2

AW: Dateien in Benutzung ermitteln.

  Alt 2. Mär 2017, 05:25
Hmm..

wenn mit ein bisschen Google hättest Du sowas gefunden

Delphi-Quellcode:
function FileInAccess(AFileName : Widestring):boolean;
var
  HFileRes: HFILE;
begin
  HFileRes := CreateFileW(PWideChar(AFileName),
                         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;

Dies entspricht auch dem Microsoft-Vorschlag (leider Link nicht zur Hand..).

Es kann nur zu Problemen kommen, wenn Du das mit ReadDirectoryChangesW/GetQueuedCompletionStatus einsetzt.
Hier ist es bei einem Tool von uns (Überwachung von Verzeichnissen und Einlesen neu erstellter Dateien) zum Problem gekommen, das wir das CreateFile bekommen haben, dann geprüft haben ob das File 'Frei' ist.
Jedoch sind wir teilweise mit der obrigen Prüfung so schnell gewesen, dass wir dem anderen Programm, welches die Datei schreiben sollte zwischen dessem CreateFile und WriteFile dazwischen gegrätscht sind.

Denn Windows macht intern erste ein CreateFile -> CloseFile -> ReopenFile (mit Prozessexplorer beobachtet) und wir sind dann zwischen CloseFile und Reopen dazwischen gegangen und haben mit der Prüfung das File bereits geöffnet

Solange Du aber nur deine eigenen Dateien Überprüfst, sollte es gehen...
  Mit Zitat antworten Zitat