ファイルが書き込まれるとすぐにディレクトリからファイルをロードする必要があるプログラムがあります。FileSystemWatcherに、ディレクトリの変更を通知してもらいました。イベントで何が変更されたかを確認するのではなく、ファイルを一覧表示して、見つかったすべての処理を開始します。
まだ書かれているファイルを読み込もうとしないように、次のようなコードがあります。
try {
fs = fi.Open(FileMode.Open, FileAccess.ReadWrite,
FileShare.None);
message = new byte[fs.Length];
int br = fs.Read(message, 0, (int)fi.Length);
}
catch (Exception e) {
// I'll get it next time around
return;
}
finally {
if (fs != null)
fs.Close();
}
問題は、200分の1程度の一部のファイルでは、プログラムがすべてゼロを読み取ることです。ファイルの長さは正しいですが、内容はすべてゼロバイトのようです。後でファイルをチェックすると、実際に正しいデータが含まれていることがわかります。ファイルを開く方法によって、ファイルへの早期アクセスを防ぐことができると思いました。
DOSコマンド'copyInFile_0 * dropdir'(実行ごとに約100ファイル)を使用してファイルをディレクトリにコピーすることでこれをテストしています。おそらく、このコマンドは2つのステップでコピーを実行します:1)スペースの割り当てと2)スペースの塗りつぶしプログラムは時々2つの途中でジャンプします。
これを信頼できるようにコーディングする方法について何かアイデアはありますか?
更新: 私はライティングプログラムを制御できません-それは何でもかまいません。防御的にコーディングする必要があるようです。