書き込まれるとすぐにディレクトリからファイルを読み込む必要があるプログラムがあります。 FileSystemWatcherを使ってディレクトリの変更を通知します。どのような変更があったのかをイベントで確認するのではなく、ファイルをリストして、見つかったすべてのファイルを処理し始めます。問題は、いくつかのファイル、200で約1のために、プログラムはすべてゼロを読むことである書き込み直後のファイルの読み込みすべてゼロ(.net)を取得
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();
}
:
はまだ私のようなコードを持って書かれているファイルを読み込もうとしないようにするには。ファイルの長さは正しいが、内容はすべてゼロバイトであるように見える。後者のファイルをチェックすると、実際の正しいデータが含まれていることがわかります。私はファイルを開くときにファイルへの早すぎるアクセスを妨げると思った。
DOSコマンド 'copy InFile_0 * dropdir'(実行ごとに約100ファイル)を使用してディレクトリにファイルをコピーすることでテストします。このコマンドは、コピーを2つのステップで実行します.1)スペースを埋めると私のプログラムは時々2つの途中で飛びます。
これをコード化する方法に関するアイデアはありますか?
更新:私は書き込みプログラムを制御できません。それは何でもかまいません。私は防衛的にコードする必要があるように見えます。
ヒント:例外のログを追加します。静かに失敗しないでください。 – Amy
ファイルにロックをかけないプログラムで作業しています。例えば、Cプログラムでは一般的に、fopen()はファイルをオープンしている間にどのプログラムでも読み書きができるようにします。「しばらく待って」を超えて勝つ方法はたくさんありません。 –