我有个问题。我已经编写了一个包装器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)。
一年前已经报告了不正确路径的问题(看起来已经解决了),但我的单声道来自去年 12 月(MonoDevelop 在参考部分中说它是版本 4.0.0.0,这就是我能说的关于分发的全部内容) 并且错误仍然存在...请参阅: https ://bugzilla.xamarin.com/show_bug.cgi?id=5747
有任何想法吗?我真的很好奇是否有一种解决方法不需要编写自己的观察程序来重复轮询文件系统或为根目录下的每个文件夹启动单独的观察程序......
提前致谢!