ランダムなエラーを生成するWebサービスがあり、私はそのエラーを発見したと思います。ファイルの同時読み書きの処理
次のように基本的に、それは常にXmlDocumentにロードされ、その後、設定ファイルを読んでいる:
var config = File.ReadAllText(filename);
xmlDoc.Load(config);
しかし、後の時間(多分秒後)設定値のいずれかが更新され、ファイルに
xmlDoc.Save(filename);
を保存したので、私は今、最初のREAD操作中に(私はちょうど今チェックすることはできませんので、残念ながら元の開発者は、空のtryブロックを追加しました)多くのエラーを経験していると私はそれを読んしようとしているので、それはだと思いますIISから生成された別のプロセスが.Saveパート。私はFile.ReadAllTextがどのように動作し、書き込みロックされたファイルで失敗するかどうかわかりません。
読み取りを確実にするためにこれを処理する最適なソリューションは何ですか?書き込まれる値は単なるカウンタであり、失敗した場合は無視されますが、それは重要ではありませんが、書き込まれた方が好きです。私はそれを別の設定ファイルに入れて、エラーで生きることができると思うが、むしろ単なるファイルだっただろう。
ありがとうございました。それは、ファイルへの書き込みから他のプロセスを妨げるように、ソースを見て、それは、順番にFileAccess.Read
とFileShare.Read
で開かFileStream
を使用して、内部StreamReader
をどのように使用するかFile.ReadAllText()
作品に関するあなたの質問に答えるために
静的オブジェクトにlock()を使用すると、同時に1つのスレッドだけがファイルにアクセスできるようになります。 – Gusman
ありがとうございます。これは、IIS Webサービスで標準的な方法ですが、同時に多数のプロセスを同時に読み書きしたいと仮定していますか?私は私の前提の通り、読書のロックを書いているのでしょうか? –
@gusman OPは異なるスレッドではなく異なるプロセスからの読み込みだと思うので、ロックではなくミューテックスが必要です。 –