ネットワーク共有に保存されているファイルを読み取るプロセスが多数あります。もともと、ファイルを読み取れるプロセスは 1 つだけで、他のすべてのプロセスは例外をスローしていました。それに対処するために次のコードを実装しました。
using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
content = fileStreamReader.ReadToEnd();
}
これにより、複数のプロセスが同じファイルを読み取ることができますが、複数のプロセスがファイルにアクセスできない場合があるため、まだ問題があるようです。それでも、ファイルが使用されていないときに後で戻って、問題なく開くことができます。現在、ランダムな遅延が実装された再試行動作がいくつかあり、これまでのところ役に立っているようです。このようにするのは少し風変わりに思えるので、より良い方法は何でしょうか?
これは奇妙な部分です。私が取得している例外は、ファイル IO からではなく、CommStudio というライブラリからのものです。要するに、ファイルを文字列にダンプし、少し変更してメモリ ストリームにダンプし、rs232 の ymodem 経由で出荷します。例外は、リモート システムがキャンセルされたことを示しています。データを取得するデバイスは、転送エラーが発生したことを報告します。これは通常、不完全または空のファイルが受信されたことを意味します。
通常、私はこれをライブラリのせいにしますが、机上のテストや、ファイルにアクセスするプロセスが 1 つしかない場合は問題なく動作します。実際に一貫しているように見える唯一のことは、複数のプロセスがファイルにアクセスしているときに失敗する可能性が高いということです。