0

在尝试访问文件之前,我需要检查文件是否正在使用中。有没有办法在拉撒路环境中做到这一点?

4

2 回答 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 回答