文件系统监控器的使用指南

编程中,经常需要监控文件和文件夹的变化,例如创建、修改、删除等。在.NET框架中,FileSystemWatcher类提供了这种功能。但是,对于初学者来说,如何正确使用FileSystemWatcher以及如何设置NotifyFilters来获取期望的事件响应,可能会感到困惑。本文旨在提供简单的指导,帮助初学者理解并使用NotifyFilters枚举。

什么是NotifyFilters?

NotifyFilters是一组过滤器,它们决定了正在监控的内容,以及哪些事件可以被触发。在一些复杂文件操作或像杀毒软件这样的应用程序可能会触发额外的事件的情况下,这些过滤器也很有帮助,尽管没有一些额外的防御性编码,不能100%有信心。默认情况下,NotifyFilter属性的值包括LastWrite、FileName和DirectoryName。

哪些过滤器会导致Changed事件被触发?

以下是可以导致Changed事件被触发的过滤器:

  • Attributes
  • CreationTime
  • LastAccess
  • LastWrite
  • Security
  • Size

哪些过滤器会导致Renamed事件被触发?

以下是可以导致Renamed事件被触发的过滤器:

  • DirectoryName
  • FileName

哪些过滤器会导致Created事件被触发?

以下是可以导致Created事件被触发的过滤器:

  • DirectoryName
  • FileName

哪些过滤器会导致Deleted事件被触发?

以下是可以导致Deleted事件被触发的过滤器:

  • DirectoryName
  • FileName

如果错过了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),尽管需要更多的代码来触发文件夹内任何文件的事件。

附录A - MSDN中NotifyFilters枚举的详细表格

以下是NotifyFilters枚举的详细表格:

  • Attributes - 文件或文件夹的属性
  • CreationTime - 文件或文件夹的创建时间
  • DirectoryName - 目录的名称
  • FileName - 文件的名称
  • LastAccess - 文件或文件夹上次打开的日期
  • LastWrite - 文件或文件夹上次写入的日期
  • Security - 文件或文件夹的安全设置
  • Size - 文件或文件夹的大小
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485