0

ファイルにアクセスする前に、ファイルが使用中かどうかを確認する必要があります。Lazarus環境でそれを行う方法はありますか?

4

2 に答える 2

2

でファイルを開き、FileOpen(FileName, fmOpenReadWrite or fmShareExclusive)結果を確認します。

更新(Ken White のコメントに感謝)。FileOpen実際ファイルにアクセスできるため、これは質問に対する直接的な回答ではありませんが、チェックを実行してからファイルを開くべきではありません。そうしないと、競合状態が発生します。ファイルを開いてから、開くことが成功したかどうかを確認する必要があります。

ハンドルを使用してファイルを開き、FileOpenそのハンドルを介してファイルにアクセスすることは、なじみがないように思えるかもしれません。ブロックRewrite内などでファイルを開くときに、同じ目標を達成できます。try-exceptLazarus についてはよくわかりませんが、Delphitry-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 に答える