1. ホーム
  2. c#

[解決済み] ファイルが使用中であるかどうかを確認する方法はありますか?

2022-03-21 13:43:53

質問

C#でプログラムを書いているのですが、1つの画像ファイルに繰り返しアクセスする必要があります。ほとんどの場合、それは動作しますが、私のコンピュータが高速に実行されている場合、それはファイルシステムに戻って保存される前にファイルにアクセスしようとすると、エラーがスローされます。

<ブロッククオート

ファイルが他のプロセスによって使用されています。

これを回避する方法を見つけたいのですが、ググっても例外処理を使ったチェックの作成しか出てきません。これは私の宗教に反することなので、どなたか良い方法をご存じないでしょうか?

解決方法は?

このソリューションに関するNOTEを更新しました。 : で確認中。 FileAccess.ReadWrite でチェックすると、Read-Onlyのファイルでは失敗するため、解決策を修正しました。 FileAccess.Read .

ORIGINAL 過去数年間、このコードを使っていますが、特に問題はありません。

例外を使うことに躊躇する気持ちはわかるが、常に例外を避けることはできない。

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;
}