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;