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;