テキスト ファイルに書き込むコードの一部があります。これは、ファイルに書き込むことになっている唯一のアクティブなプロセスであり、その方法は次のとおりです。
try
{
File.AppendAllText(path, '\n' + tmp);
}
catch (Exception)
{
lblError.Text = "Unable to save file";
}
これは、半分の時間のようにうまく機能します。ただし、ファイルが別のプロセスによって使用されているという例外がスローされることがあります。ファイルを使用するプロセスとそのw3wp.exe
. 私はFile.AppendAllText
それが終わったらファイルを閉じると読んだので、私がやったようにうまくいくはずです。右?
編集:
目的の説明を求められたので、ここに行きます。コードのこの部分は、別のプロセスが使用する構成テキストファイルに行を追加することになっています。そのプロセスが現在実行されていないことは 100% 確信しています。
また、これは asp.net アプリケーション (コード ビハインドから) であることも付け加えておきます。したがって、ユーザーは asp ページから config.txt に書き込むことができます。
私はこれを試しました:
static readonly object saveLock = new object();
/*
* stuff
*/
protected void saveToConfig(string input)
{
lock(saveLock)
{
File.AppendAllText(path, '\n' + input);
}
}
しかし、複数のプロセスがファイルにアクセスしようとしているという IOException エラーが引き続き発生します。