Hallo,
hab' eine eigendlich recht einfache Frage: Wie kann man prüfen, ob eine Datei zum lesen geöffnet werden kann (z.B. also von keinem anderen Programm gerade geöffnet ist)?
Ich hab's bisher mit folgender Funktion probiert, allerdings wird z.B. ein gerade geöffnetes Excel-File problemlos durchgereicht (was dann später zu nem I/O Error 32 führt):
Delphi-Quellcode:
function CanOpenFile(const aName: string; var ReadOnly: Boolean): Boolean;
var
HFileRes: hFILE;
fStream: tFileStream;
begin
Result := False;
ReadOnly := True;
HFileRes := 0;
if FileExists(aName) = True
then
begin
try
fStream := TFileStream.Create(aName, fmOpenRead OR fmShareDenyNone);
try
Result := true;
Try
HFileRes := CreateFile(pchar(aName), GENERIC_READ or GENERIC_WRITE, 0 , nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
ReadOnly := (HFileRes = INVALID_HANDLE_VALUE);
Finally
If HFileRes <> 0 then CloseHandle(HFileRes);
End;
finally
fStream.Free;
end;
except
Result := false;
end;
end;
end;
Thanks,
Gerald