.net FileSystemWatcher не подхватывает перемещенные папки

Я нашел много дискуссий о перемещенных файлах (с которыми у меня нет проблем), но не о конкретных перемещенных папках (отсюда и этот пост).

у меня есть 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;

Независимо от того, что я делаю с файлами, я получаю события, как ожидалось, однако, если я перетаскиваю (перемещаю) в папке (даже с файлами в ней) в наблюдаемую папку, ни одно из событий не генерируется вообще.

Я работаю на Windows 10 (не уверен, что другие версии win ведут себя так же).

Кто-нибудь знает, как получить уведомление о перемещении папки?

2 ответа

Решение

Вы явно исключаете изменения каталога, не включая NotifyFilters.DirectoryName в вашем NotifyFilter,

Вот ссылка на документацию, но это верно только косвенно:-) Я подтвердил это, просто используя ваш код без, а затем с дополнительным флагом.

Странно, у меня это работает

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);
}
Другие вопросы по тегам