首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileNotFoundException in FileSystemWatcher

FileNotFoundException in FileSystemWatcher
EN

Stack Overflow用户
提问于 2010-10-20 10:30:59
回答 4查看 2.7K关注 0票数 1

我在目录上使用FileSystemWatcher,并添加了它的事件处理程序,设置了它的EnableRaisingEvents=true;IncludeSubdirectories=false;,并添加了NotifyFilters

在运行应用程序时,如果我有时在指定的目录中创建新文件夹,则

FileNotFoundException:“读取目录时出错”。System.IO.FileSystemWatcher.StartRaisingEvents() System.IO.FileSystemWatcher.set_EnableRaisingEvents(Boolean值)

问题的根本原因是什么?

什么是StartRaisingEvents()

EN

回答 4

Stack Overflow用户

发布于 2010-10-20 10:33:53

这通常是因为FileSystemWatcher可能不可靠。当您获得事件时,该文件夹可能“完全”存在。在实际执行IO操作之前,您可能需要使用足够的暂停进行重试,并执行各种Directory.Exists()检查。

票数 3
EN

Stack Overflow用户

发布于 2021-05-06 06:21:28

只是出于愚蠢,我在思考之前搜索了一下。

在我的例子中,Path是在 EnableRaisingEvents之后定义的。

不会抛出异常:

代码语言:javascript
复制
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\";
//...
watcher.EnableRaisingEvents = true;

这将:

代码语言:javascript
复制
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.EnableRaisingEvents = true;
//...
watcher.Path = @"C:\";

所以。由于我喜欢快速失败,而不是让下一个人知道到底发生了什么,所以我在path声明之后对此进行了修改:

代码语言:javascript
复制
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;

愚蠢的问题,但至少我给出了一些古怪的快速失败的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2016-01-09 21:34:32

我遇到了同样的问题,最后我发现问题出在这条路上。

Directory.Exist()给出了目录存在的答案.即使路径在字符串的末尾得到一个空字符,但是FileSystemWatcher无法管理它。因此,很明显,Directory.Exist()会修剪路径,但守望者不会。在我的例子中,清除空字符解决了问题。

希望能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3976862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档