ファイルがディスク上で更新されたときに通知を取得しようとしています。私はフラッシュが発生するとすぐにこの通知を得ることに興味がありますが、FileSystemWatcherはストリームが開いたり閉じたりしたときだけイベントを送信するようです。FileSystemWatcher変更イベント(LastWriteの場合)が信頼できない
以下のコードでは、ファイルに書き込みを行い、繰り返しバッファをディスクにフラッシュします。しかし、FileSystemWatcherは書き込みの開始時と終了時に一度だけ通知していました。
これらの通知を受け取る別の方法はありますか?それともポーリングを使うべきですか?
コード:
class Program
{
static void Main(string[] args)
{
FileSystemWatcher watcher = new FileSystemWatcher(Environment.CurrentDirectory, "Test.txt");
watcher.Changed += watcher_Changed;
watcher.EnableRaisingEvents = true;
using(TextWriter writer = new StreamWriter("Test.txt"))
{
WriteData(writer);
WriteData(writer);
WriteData(writer);
WriteData(writer);
}
Thread.Sleep(10000);
}
private static void WriteData(TextWriter writer)
{
writer.WriteLine("Hello!");
writer.Flush();
Console.WriteLine(DateTime.Now.ToString("T") + "] Wrote data");
Thread.Sleep(3000);
}
static void watcher_Changed(object sender, FileSystemEventArgs e)
{
Console.WriteLine(DateTime.Now.ToString("T") + "] Watcher changed!");
}
}
UPDATE 1
私は秒を表示するためのDateTimeのToString関数を修正しました。上のコードの出力は次のとおりです。
11:37:47 AM] Watcher changed!
11:37:47 AM] Wrote data
11:37:50 AM] Wrote data
11:37:53 AM] Wrote data
11:37:56 AM] Wrote data
11:37:59 AM] Watcher changed!
ありがとう!
'FileSystemWatcher'が信頼できないの適用を前提と多くの理由から。すべての更新の信頼できる通知が必要な場合は、両側を変更し、それらの間に他の明示的な通信チャネルを使用します。 –
私は同意すると良い選択になるかもしれませんが、私の場合は不可能です。 – VitalyB
ああ、私はあなたのサンプルコード/記述から、この統合問題の両側のコードを管理していると仮定しました。そうでない場合は、私が何を推薦するか分からない。私は思うだろう。 –