我需要查看文件夹(在网络共享上),并在文件名更改并将文件移动到子目录(所有一个事件)时收到通知。此事件可能每天发生两次。我会有多个FileSystemWatchers
来查看同一个文件的多个文件夹。
然而,FileSystemWatcher
对于错过的事件而言是出了名的坏事,我不可能发生这种情况。我试过复制环境似乎工作但我不知道那是因为我特别做了什么。
如果我只关注OnRenamed
个事件,我是否仍有可能遇到问题,或者我可以确定不会错过任何活动吗?
答案 0 :(得分:0)
在正常工作的网络中,您不应该有任何与丢失事件相关的错误,但是您应该知道网络上的简单打嗝会使您的FileSystemWatcher监控无效。
与网络共享连接的短暂下降将在FileSystemWatcher中触发错误,即使重新建立连接,FileSystemWatcher也将不再收到任何通知。
这是在MSDN上找到的一个适应性很强的例子
static void Main()
{
// Create a new FileSystemWatcher and set its properties.
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"\\yourserver\yourshare";
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = "*.txt";
// Add handler for errors.
watcher.Error += new ErrorEventHandler(OnError);
// Begin watching.
watcher.EnableRaisingEvents = true;
// Wait for the user to quit the program.
Console.WriteLine("Press \'q\' to quit the sample.");
while(Console.Read()!='q');
}
private static void OnError(object source, ErrorEventArgs e)
{
// Show that an error has been detected.
Console.WriteLine("The FileSystemWatcher has detected an error");
// Give more information if the error is due to an internal buffer overflow.
Type t = e.GetException().GetType();
Console.WriteLine(("The file system watcher experienced an error of type: " +
t.ToString() + " with message=" + e.GetException().Message));
}
如果您尝试启动此控制台应用程序然后禁用网络连接,您将看到Win32Exception,但如果再次执行此操作,则运行的FileSystemWatcher将不会再看到错误事件