在编程中,经常需要监控文件和文件夹的变化,例如创建、修改、删除等。在.NET框架中,FileSystemWatcher类提供了这种功能。但是,对于初学者来说,如何正确使用FileSystemWatcher以及如何设置NotifyFilters来获取期望的事件响应,可能会感到困惑。本文旨在提供简单的指导,帮助初学者理解并使用NotifyFilters枚举。
NotifyFilters是一组过滤器,它们决定了正在监控的内容,以及哪些事件可以被触发。在一些复杂文件操作或像杀毒软件这样的应用程序可能会触发额外的事件的情况下,这些过滤器也很有帮助,尽管没有一些额外的防御性编码,不能100%有信心。默认情况下,NotifyFilter属性的值包括LastWrite、FileName和DirectoryName。
以下是可以导致Changed事件被触发的过滤器:
以下是可以导致Renamed事件被触发的过滤器:
以下是可以导致Created事件被触发的过滤器:
以下是可以导致Deleted事件被触发的过滤器:
如果错过了MSDN文档中的信息,可以使用位运算符“|”来组合多个NotifyFilters成员,如下所示:
JavaScript
...NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
大多数FileWatcher指南都会引导使用Changed事件。然而,使用这个事件通常会导致多个事件,这是不期望的。可以尝试以下代码,看看两个事件的行为(只需在运行时将文件复制到c:\temp)。然后尝试以下代码,演示如何使用Created与NotifyFilters.FileName来获取文件夹中新文件的单个事件。
复制的文件会在目标文件夹中触发Created事件,所以使用NotifyFilters.FileName。对于移动的文件也是如此,但也可以监视源文件夹的Deleted事件(仍然使用相同的NotifyFilter)。上述方法适用于复制和移动的文件夹(使用NotifyFilters.DirectoryName),尽管需要更多的代码来触发文件夹内任何文件的事件。
以下是NotifyFilters枚举的详细表格: