在尝试访问文件之前,我需要检查文件是否正在使用。有没有办法在Lazarus环境中做到这一点?
答案 0 :(得分:2)
使用FileOpen(FileName, fmOpenReadWrite or fmShareExclusive)
打开文件并检查结果。
更新(感谢Ken White的评论)。这不是您的问题的直接答案,因为FileOpen
实际上获取访问该文件,但您不应该执行检查然后打开文件,否则您将参加比赛条件。您应该打开该文件,然后检查打开是否成功。
使用FileOpen
打开文件并通过其句柄访问该文件可能看起来不熟悉。用例如打开文件时可以实现相同的目标Rewrite
块内的try-except
。我不确定Lazarus,但是在Delphi中使用try-except
和高级文件例程需要在异常的情况下显式重置IOResult(将SetInOutRes(0)
放入except
部分),否则以下文件操作失败。
答案 1 :(得分:1)
你没有。你试图打开它,并在你不能的时候处理异常。
首先检查它是否正常使用。
Your code to see if it's in use says it's not
--->>> Another app opens the file, locking it
Your code to open file fails
相反,请使用普通try..except
块:
try
FS := TFileStream.Create(YourFileName, fmOpenReadWrite, fmShareExclusive);
// Code to use file here
except
// Handle failure to access file
end;