【问题标题】:FileNotFoundException in FileSystemWatcherFileSystemWatcher 中的 FileNotFoundException
【发布时间】:2010-10-20 10:30:59
【问题描述】:

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

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

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

问题的根本原因是什么?

StartRaisingEvents() 是什么?

【问题讨论】:

  • 你能发布实际代码吗?我猜你正在错误地构建新的文件夹路径。
  • 我正在使用资源管理器创建新文件夹> 创建新文件夹

标签: c# .net file exception file-watcher


【解决方案1】:

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

【讨论】:

  • 在对文件执行操作之前,我不得不让线程休眠以确保文件已成功创建。
【解决方案2】:

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

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

希望它可以帮助某人。

【讨论】:

    【解决方案3】:

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

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

    例如不会抛出异常:

    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;
    

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-18
        • 2011-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2017-08-07
        • 1970-01-01
        相关资源
        最近更新 更多