.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);
}