1

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

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

FileNotFoundException:“读取目录时发生错误”。System.IO.FileSystemWatcher.StartRaisingEvents() System.IO.FileSystemWatcher.set_EnableRaisingEvents(布尔值)

问题的根本原因是什么?

是什么StartRaisingEvents()

4

4 回答 4

3

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

于 2010-10-20T10:33:53.250 回答
1

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

给出目录存在的Directory.Exist()答案......即使路径在字符串末尾有一个空字符但FileSystemWatcher无法管理它。所以显然Directory.Exist()修剪路径但观察者没有。在我的情况下,删除空字符可以解决问题。

希望它可以帮助某人。

于 2016-01-09T21:34:32.303 回答
0

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

就我而言,路径是在EnableRaisingEvents之后定义的。

eg不会抛出异常:

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\";
//...
watcher.EnableRaisingEvents = true;

这将:

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.EnableRaisingEvents = true;
//...
watcher.Path = @"C:\";

所以。因为我喜欢快速失败而不是让下一个弄清楚到底发生了什么,所以我在路径声明后修改了它:

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;

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

于 2021-05-06T06:21:28.633 回答
0

对我来说,这是一个谜,我猜一个目录是用一些无效字符命名的。Directory.Exists(watchDirectory) 将返回 true,但 FileWatcher 会因上述错误而崩溃。“修复”是删除目录并使用相同的名称重新创建它:)

于 2021-09-19T17:56:04.150 回答