我在目录上使用FileSystemWatcher,并添加了它的事件处理程序,设置了它的EnableRaisingEvents=true;和IncludeSubdirectories=false;,并添加了NotifyFilters。
在运行应用程序时,如果我有时在指定的目录中创建新文件夹,则
FileNotFoundException:“读取目录时出错”。System.IO.FileSystemWatcher.StartRaisingEvents() System.IO.FileSystemWatcher.set_EnableRaisingEvents(Boolean值)
问题的根本原因是什么?
什么是StartRaisingEvents()?
发布于 2010-10-20 10:33:53
这通常是因为FileSystemWatcher可能不可靠。当您获得事件时,该文件夹可能“完全”存在。在实际执行IO操作之前,您可能需要使用足够的暂停进行重试,并执行各种Directory.Exists()检查。
发布于 2021-05-06 06:21:28
只是出于愚蠢,我在思考之前搜索了一下。
在我的例子中,Path是在 EnableRaisingEvents之后定义的。
不会抛出异常:
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\";
//...
watcher.EnableRaisingEvents = true;这将:
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.EnableRaisingEvents = true;
//...
watcher.Path = @"C:\";所以。由于我喜欢快速失败,而不是让下一个人知道到底发生了什么,所以我在path声明之后对此进行了修改:
var watcher = new FileSystemWatcher();
watcher.Path = @"C:\Users\me";
if (string.IsNullOrWhiteSpace(watcher.Path))
throw new InvalidOperationException($"You must define a path.");
if (!Directory.Exists(watcher.Path))
throw new InvalidOperationException($"Directory {watcher.Path} does not exist.");
watcher.EnableRaisingEvents = true;愚蠢的问题,但至少我给出了一些古怪的快速失败的解决方案。
发布于 2016-01-09 21:34:32
我遇到了同样的问题,最后我发现问题出在这条路上。
Directory.Exist()给出了目录存在的答案.即使路径在字符串的末尾得到一个空字符,但是FileSystemWatcher无法管理它。因此,很明显,Directory.Exist()会修剪路径,但守望者不会。在我的例子中,清除空字符解决了问题。
希望能帮上忙。
https://stackoverflow.com/questions/3976862
复制相似问题