即使IncludeSubdirectories设置为false,FileSystemWatcher也会获取子目录事件

时间:2014-04-04 09:26:19

标签: c# windows-services filesystemwatcher

我在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.扩展名为空,这就是我忽略这一点的原因,这就是我忽略这种情况的方法。

有关我怎样才能弄清楚这里发生了什么的任何建议?

1 个答案:

答案 0 :(得分:2)

在目录中创建或删除文件也会被视为对该目录本身的更改。这是向你报告的事件。 Folder2本身位于您正在监控的目录中。

报告的路径是目录的路径,而不是其中的文件,并且您会注意到它的Changed处理程序被调用,尽管文件系统操作实际上是创建或删除。

在您的事件处理程序中,您只需检查报告的路径是否为a directory,并且只检查return并且在事件处理程序中不执行进一步处理(如果是这种情况)。