FileSystemWatcher unter Mono-Watching-Unterverzeichnissen

Ich habe ein Problem. Ich habe einen Umschlag geschriebenFileSystemWatcher das erkennt Änderungen inWurzel Ordner und alle seine Unterordner. Nichts Außergewöhnliches:

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;

In .NET unter Windows funktioniert es wie ein Zauber. Aber als ich den Code nach Mono portiert und ihn unter OSX ausgeführt habe, funktioniert er nur im Stammordner einwandfrei.

Probleme, die mir bis jetzt aufgefallen sind:

Ereignisse werden nicht für Vorgänge in Ordnern ausgelöst, die zum Zeitpunkt des Starts des Watchers bereits unter root vorhanden sind

Pfade, über die ich kommeEventArgs.FullPath Eigenschaften sind nicht korrekt (wenn ich eine Datei nach path_to_root / some / more / subdirs / some.file kopiere, erhalte ich nur den Pfad path_to_root / some.file).

Das Problem mit unkorrekten Pfaden wurde bereits vor einem Jahr gemeldet (und es sieht so aus, als ob es behoben wurde), aber mein Mono stammt aus dem Dezember letzten Jahres (MonoDevelop sagt im Abschnitt Referenzen, dass es Version 4.0.0.0 ist, es ist alles, was ich über die Distribution sagen kann ) und die Bugs sind immer noch da ... Siehe:https://bugzilla.xamarin.com/show_bug.cgi?id=5747

Irgendwelche Ideen? Ich bin wirklich neugierig, ob es eine Problemumgehung gibt, die es nicht erforderlich macht, einen eigenen Watcher zu schreiben, der das Dateisystem wiederholt abfragt oder einen separaten Watcher für jeden Ordner darunter startetWurzel...

Danke im Voraus!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage