【问题标题】:C#: What happens to the FileSystemWatcher after watched folder is deletedC#:删除监视文件夹后 FileSystemWatcher 会发生什么
【发布时间】:2017-03-19 13:32:49
【问题描述】:

我正在为我正在开发的一些代码使用FileSystemWatchers。不过,我确实有一个问题,当 FSW 正在观看的文件夹被删除时会发生什么?

我的用例是这样的:

  1. 用户创建目录 Foo

  2. 然后我的代码使用 FSW 监视 Foo

  3. 用户删除 Foo

  4. 稍后,用户重新创建 Foo 目录。

在这种情况下,原始 FSW 会发生什么情况?它仍然会监视新目录,还是我必须创建一个新目录?

非常感谢任何帮助。

【问题讨论】:

    标签: c# filesystemwatcher


    【解决方案1】:

    TL;DR:不,FSW 不会在重新创建后自动观看“Foo”。


    最简单的方法是验证它是测试它,所以我做了。

    如果您使用FileSystemWatcher 的实例来监视目录“Foo”,然后删除正在监视的目录,则FileSystemWatcher 将停止监视该目录。

    即使在重新创建了同名“Foo”的目录后,FileSystemWatcher 也不会再针对该目录中的任何更改引发事件。

    删除并重新创建“Foo”后,尝试通过将 Path 属性设置为“Foo”并将 EnableRaisingEvents 属性设置为 true 来“重置”FileSystemWatcher 并不能始终如一地工作 - 它第一次正常工作周围,​​但如果“Foo”被删除并重新创建第二次,则无法这样做。 (这在 Visual Studio 2017 社区版中进行了测试)。

    遗憾的是,在这种情况下,使FileSystemWatcher 按预期工作的唯一一致方法是创建FileSystemWatcher 的新实例。

    【讨论】:

    • 这很有趣。我不是专门为删除而这样做的,而是任何类型的访问错误(网线拔出等),而且它似乎连续多次工作。我发现的奇怪行为是,如果设置 EnableRaisingEvents true 失败,它仍然是 true。因此,我必须将其设置为 false,因为我通过它为 true 来验证网络是否正常。
    【解决方案2】:

    MSDN 说:

    一些常见的事件,例如复制或移动文件或目录,并不直接对应于事件,但这些事件确实会引发事件。当您复制文件或目录时,如果正在监视该目录,系统会在该文件复制到的目录中引发 Created 事件。如果您从中复制的目录正被 FileSystemWatcher 的另一个实例监视,则不会引发任何事件。例如,您创建两个 FileSystemWatcher 实例。 FileSystemWatcher1 设置为监视“C:\My Documents”,FileSystemWatcher2 设置为监视“C:\Your Documents”。如果将文件从“我的文档”复制到“您的文档”中,FileSystemWatcher2 将引发 Created 事件,但不会为 FileSystemWatcher1 引发任何事件。与复制不同,移动文件或目录会引发两个事件。在前面的示例中,如果您将文件从“我的文档”移动到“您的文档”,FileSystemWatcher2 将引发 Created 事件,FileSystemWatcher1 将引发 Deleted 事件。

    【讨论】:

    • 这告诉我事件是如何引发的,但它并没有告诉我在删除它一直在监视的目录之后“孤立”FSW 会发生什么。
    猜你喜欢
    • 2013-01-18
    • 2014-08-31
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2013-09-09
    • 2023-03-16
    相关资源
    最近更新 更多