Vit*_*lyB 7 .net c# filesystemwatcher
我试图在磁盘上更新文件时收到通知。我有兴趣在发生刷新时立即收到此通知,但是,似乎 FileSystemWatcher 只会在流打开或关闭时发送事件。
在下面的代码中,我正在写入一个文件并反复将缓冲区刷新到磁盘。然而,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!");
}
}
Run Code Online (Sandbox Code Playgroud)
我已更正 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!
Run Code Online (Sandbox Code Playgroud)
谢谢!