私は C# で、1 つの画像ファイルに繰り返しアクセスする必要があるプログラムを書いています。ほとんどの場合は動作しますが、コンピュータが高速で動作している場合は、ファイルがファイルシステムに保存される前にファイルにアクセスしようとし、エラーが発生します。
「ファイルは別のプロセスによって使用中です」
これを回避する方法を見つけたいのですが、Google で検索しても、例外処理を使用してチェックを作成する方法しか見つかりません。これは私の信条に反するので、もっと良い方法がある人はいませんか?
ベストアンサー1
このソリューションに関する更新された注記: でのチェックはFileAccess.ReadWrite
読み取り専用ファイルでは失敗するため、 でチェックするようにソリューションが変更されましたFileAccess.Read
。
オリジナル:このコードを過去数年間使用していますが、問題は発生していません。
例外の使用をためらう気持ちはわかりますが、例外を常に避けることはできません。
protected virtual bool IsFileLocked(FileInfo file)
{
try
{
using(FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None))
{
stream.Close();
}
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
//file is not locked
return false;
}