C# FileSystemWatcher中的FileNotFoundException

C# FileSystemWatcher中的FileNotFoundException,c#,.net,file,exception,file-watcher,C#,.net,File,Exception,File Watcher,我在目录上使用FileSystemWatcher,并添加了它的事件处理程序,设置它的EnableRaisingEvents=true;和IncludeSubdirectories=false;并添加了过滤器 运行应用程序时,如果我在指定目录中创建新文件夹 FileNotFoundException:读取目录时出错。 System.IO.FileSystemWatcher.StartRaisingEvents System.IO.FileSystemWatcher.set_EnableRaisin

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

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

FileNotFoundException:读取目录时出错。 System.IO.FileSystemWatcher.StartRaisingEvents System.IO.FileSystemWatcher.set_EnableRaisingEventsBoolean值

问题的根本原因是什么


什么是StartAsingEvents?

这通常是因为FileSystemWatcher可能不可靠。获取事件时,文件夹可能不完全存在。在实际执行IO操作之前,您可能需要暂停足够的时间重试并执行各种目录存在检查。

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

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

目录存在。请回答目录存在。。。即使路径在字符串末尾有一个空字符,但FileSystemWatcher无法管理它。 很明显,目录.Exist会修剪路径,但观察者不会。在我的例子中,移除空字符可以解决问题


希望它能帮助一些人。

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

目录存在。请回答目录存在。。。即使路径在字符串末尾有一个空字符,但FileSystemWatcher无法管理它。 很明显,目录.Exist会修剪路径,但观察者不会。在我的例子中,移除空字符可以解决问题


希望它能帮助某人。

出于愚蠢,我在思考之前用谷歌搜索了一下

在我的例子中,路径是在启用RaisingEvents之后定义的

e、 g.不会抛出异常:

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;

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

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

在我的例子中,路径是在启用RaisingEvents之后定义的

e、 g.不会抛出异常:

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;

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

你能发布实际的代码吗。我猜你没有正确地构建新文件夹路径。我正在使用资源管理器>创建新文件夹创建新文件夹。你是否能够发布实际代码。我猜您正在错误地构造新文件夹路径。我正在使用Explorer>Create new Folder创建新文件夹。我必须先将线程置于睡眠状态,以确保在对文件执行操作之前已成功创建文件。我必须将线程置于睡眠状态,以确保已成功创建文件在对文件执行操作之前。