FileSystemWatcher под моно - просмотр подкаталогов
У меня проблема. Я написал оберткуFileSystemWatcher
который обнаруживает изменения вкорень папка и все ее подпапки. Ничего фантастического:
FileSystemWatcher watcher = new FileSystemWatcher ();
watcher.Path = this.Root;
watcher.IncludeSubdirectories = true;
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.DirectoryName | NotifyFilters.FileName;
watcher.Changed += new FileSystemEventHandler (watcher_Changed);
watcher.Deleted += new FileSystemEventHandler (watcher_Deleted);
watcher.Created += new FileSystemEventHandler (watcher_Created);
watcher.Renamed += new RenamedEventHandler (watcher_Renamed);
watcher.EnableRaisingEvents = true;
В то время как в .NET, под Windows, это работает как шарм. Но когда я перенес код на моно и запустил код под OSX, он работает правильно только в корневой папке.
Проблемы, которые я уже заметил:
События не генерируются для операций внутри папок, уже существующих в корневом каталоге, во время запуска наблюдателя.
Пути, через которые я прохожуEventArgs.FullPath
свойство неверно (когда я копирую файл в path_to_root / some / more / subdirs / some.file, путь, который я получаю, просто path_to_root / some.file).
О проблеме с ненадлежащими путями уже сообщалось год назад (и похоже, что она была решена), но мой моно появился в декабре прошлого года (MonoDevelop говорит, что в разделе «Ссылки» это версия 4.0.0.0, это все, что я могу сказать о дистрибутиве). ) и ошибки все еще есть ... Смотрите:https://bugzilla.xamarin.com/show_bug.cgi?id=5747
Есть идеи? Мне действительно любопытно, есть ли обходной путь, не требующий написания собственного наблюдателя, который повторно опрашивает файловую систему, или запуска отдельного наблюдателя для каждой папки вкорень...
Заранее спасибо!