在尝试访问文件之前,我需要检查文件是否正在使用中。有没有办法在拉撒路环境中做到这一点?
问问题
2480 次
2 回答
2
打开文件FileOpen(FileName, fmOpenReadWrite or fmShareExclusive)
并检查结果。
更新(感谢肯怀特的评论)。这不是您问题的直接答案,因为FileOpen
实际上可以访问文件,但您不应该执行检查然后打开文件,否则您将获得竞争条件。您应该打开文件,然后检查打开是否成功。
使用其句柄打开文件FileOpen
并通过其句柄访问该文件可能看起来并不熟悉。当打开一个文件时,您可以实现相同的目标,例如Rewrite
在一个try-except
块内。我不确定 Lazarus,但在 Delphi 中使用try-except
高级文件例程需要显式重置 IOResult 以防异常(放入SetInOutRes(0)
部分except
),否则以下文件操作将失败。
于 2013-07-26T18:53:53.603 回答
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;
于 2013-07-26T18:54:44.897 回答