我有一个可以检查本地文件是否正在使用的功能。 但是,如果我映射网络驱动器并尝试检查映射驱动器中的文件是否正在使用,则该函数的结果始终为false。 我需要等待一个大文件被复制到映射驱动器,完成后我重命名该文件。 如果文件未在使用中,那么我开始执行各种操作,否则我再等一会儿再次检查。 如何修改下面的函数以使用不断复制的映射驱动器文件?
谢谢
function IsFileInUse(FileName: TFileName): Boolean;
var
HFileRes: HFILE;
begin
Result := False;
if not FileExists(FileName) then
begin
showmessage('Fisierul "'+Filename+'" nu exista!');
Exit;
end
else
begin
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;
end;
答案 0 :(得分:0)
您声称的是CreateFile
成功以独占模式打开文件,而另一方正在写入该文件。可能的解释:
我认为可以立即拒绝最终选项。方案2似乎不太可能。哪个留下选项1.您可以锁定文件,因为它没有被锁定。
我还评论该功能是虚假的。你可以删除它。只需尝试您需要执行的任何操作。如果该操作因共享冲突而失败,则表示该文件已被锁定。还要考虑使用该函数的任何代码中的竞争条件。现在解锁文件的事实不会阻止另一方锁定文件,然后才能对其执行任何操作。