5

私は問題があります。ルートフォルダーとそのすべてのサブフォルダーの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 では魅力的に機能します。しかし、コードを mono に移植して OSX でコードを実行すると、ルート フォルダーでのみ正常に動作します。

私が今気づいた問題:

  • ウォッチャーの起動時にルートの下にすでに存在するフォルダー内の操作に対してイベントが発生しない

  • プロパティ経由で取得したパスEventArgs.FullPathが正しくありません (ファイルを path_to_root/some/more/subdirs/some.file にコピーすると、取得したパスは単に path_to_root/some.file になります)。

不適切なパスの問題は 1 年前にすでに報告されています (そして解決されたようです) が、私の mono は昨年 12 月のものです (MonoDevelop は参照セクションでバージョン 4.0.0.0 であると述べています。ディストリビューションについて言えることはそれだけです)。 )そしてバグはまだそこにあります...参照: https://bugzilla.xamarin.com/show_bug.cgi?id=5747

何か案は?ファイルシステムを繰り返しポーリングする独自のウォッチャーを作成したり、ルートの下のフォルダーごとに個別のウォッチャーを開始したりする必要がない回避策があるかどうか、私は本当に興味があります...

前もって感謝します!

4

1 に答える 1