Thema: Delphi FileExistsWait

Einzelnen Beitrag anzeigen

PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

FileExistsWait

  Alt 17. Jan 2013, 13:12
Diesmal keine Frage, sondern eine kleine praktische Funktion, die sich beim Umgang mit Dateien als nützlich erwiesen hat. Oft muss man nämlich eine Datei kopieren und die Ziel-Datei dann weiterverarbeiten (z.B. öffnen). Wenn man aber große Dateien kopiert, kann es unter Umständen passieren, dass die Zieldatei noch nicht (oder nicht vollständig) existiert, wenn das Programm nachher versucht, diese zu öffnen. Wenn man nun aber eine statische Wartezeit nach dem Kopieren einbaut, kann es sein, dass ein zu langes Warten den Benutzer nervt oder die Datei trotzdem noch nicht existiert und ein Fehler auftritt. Diese kleine Funktion löst dieses Problem, indem sie intervall-weise wiederholt prüft, ob die Datei bereits existiert:
Delphi-Quellcode:
procedure MyDelay(const Milliseconds: Integer);
var
  Tick: DWord;
  Event: THandle;
  ms: Integer;
begin
  ms := Milliseconds;
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWord(ms);
    while (ms > 0) and
          (MsgWaitForMultipleObjects(1, Event, False, ms, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      if Application.Terminated then Exit;
      ms := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;

function FileExistsWait(const AFile: string; const AIntervallMS, ATimeMS: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;

  i := 0;
  while not FileExists(AFile) do
  begin
    MyDelay(AIntervallMS);
    Inc(i, AIntervallMS);
    if i > ATimeMS then
      EXIT;
  end;

  Result := True;
end;
  Mit Zitat antworten Zitat