/ / .net FileSystemWatcher не събира преместени папки - c #, .net, windows, filesystemwatcher

.net FileSystemWatcher не събира преместени папки - c #, .net, windows, 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 (не съм сигурен дали други версии на победи се държат по същия начин).

Някой знае ли как да получи известие за преместване на папката?

Отговори:

1 за отговор № 1

Изрично изключвате промените в директорията, като не ги включвате NotifyFilters.DirectoryName във вашия NotifyFilter.

Тук е връзка към документацията, но това е само коректно по подразбиране :-) Потвърдих го просто като използвах кода без и след това с допълнителния флаг.


1 за отговор № 2

Странно, това работи за мен:

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