.net FileSystemWatcher 不拾取移动的文件夹

.net FileSystemWatcher does not pick up moved folders

我发现很多关于移动的 文件 的讨论(我没有遇到任何问题),但没有任何特定于移动的 文件夹 (因此 post)。

我有一个 FileSystemWatcher 实例化如下:

  var fileWatcher = new FileSystemWatcher("C:\mypath");
  fileWatcher.IncludeSubdirectories = true;
  fileWatcher.NotifyFilter = NotifyFilters.LastWrite
                               | NotifyFilters.FileName
                               | NotifyFilters.CreationTime
                               | NotifyFilters.Size;
   fileWatcher.Changed += OnChanged;
   fileWatcher.Created += OnChanged;
   fileWatcher.Deleted += OnDeleted;
   fileWatcher.Renamed += OnRenamed;
   fileWatcher.Error += WatcherOnError;
   fileWatcher.EnableRaisingEvents = true;

无论我对文件做什么,我都会按预期引发事件,但是如果我 将文件夹(即使其中有文件)拖动(移动)到watched 文件夹,none 个事件被引发。

我 运行 在 Windows 10(不确定其他版本的 win 是否以相同方式运行)。

有谁知道如何获得文件夹移动的通知?

奇怪,这对我有用:

void Main()
{
    FileSystemWatcher fsw = new FileSystemWatcher(@"c:\Temp\");
    fsw.IncludeSubdirectories = true;
    fsw.Changed += new FileSystemEventHandler(OnChanged);
    fsw.EnableRaisingEvents = true;

    while (true) { }
}

void OnChanged(object source, FileSystemEventArgs e)
{
    // Specify what is done when a file is changed, created, or deleted.
    Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}

您通过在 NotifyFilter.

中不包含 NotifyFilters.DirectoryName 来明确排除目录更改

这里有一个 link 文档,但它只是暗示正确:-) 我通过使用你的代码而不使用然后使用额外的标志来确认它。