我在Windows服务中设置了以下FileSystemWatcher。
FileSystemWatcher Watcher = new FileSystemWatcher();
Watcher.Path = watcherDir;
Watcher.NotifyFilter = NotifyFilters.LastWrite;
Watcher.Renamed += Watcher_Renamed;
Watcher.Changed += Watcher_Changed;
Watcher.Error += Watcher_Error;
Watcher.Filter = "*.*";
Watcher.IncludeSubdirectories = false;
Watcher.EnableRaisingEvents = true;
我看到一些不一致的行为 - 它也会监听子目录中的更改。我已经登录,看看它发现它有点奇怪
我正在看C:\ Temp \ Folder1,其他一些进程在C:\ Temp \ Folder1 \ Folder2中创建一个日志文件。此FileSystemWatcher对象正在选择此信息 -
1. e.FullPath给出了子目录的名称,在本例中为C:\ Temp \ Folder1 \ Folder2
2. Path.GetDirectoryName(e.FullPath)为我提供了我实际正在观看的目录,即C:\ Temp \ Folder1。
3.扩展名为空,这就是我忽略这一点的原因,这就是我忽略这种情况的方法。
有关我怎样才能弄清楚这里发生了什么的任何建议?
答案 0 :(得分:2)
在目录中创建或删除文件也会被视为对该目录本身的更改。这是向你报告的事件。 Folder2
本身位于您正在监控的目录中。
报告的路径是目录的路径,而不是其中的文件,并且您会注意到它的Changed
处理程序被调用,尽管文件系统操作实际上是创建或删除。
在您的事件处理程序中,您只需检查报告的路径是否为a directory,并且只检查return
并且在事件处理程序中不执行进一步处理(如果是这种情况)。