在实际应用开发中有时候需要操作本地文件或文件夹还需监控磁盘目录的变化比如当新增或删除文件时提示变更信息以起到警示作用。合理的文件监控还可以起到事半功倍的效果今天我们以一些简单的小例子简述基于.NET的Windows窗体编程中FileSystemWatcher控件的相关应用仅供学习分享使用如有不足之处还请指正。概述在WinForms开发框架中要实现磁盘上文件目录监控主要是通过以下控件实现FileSystemWatcher主要用于监听指定目录下文件系统的变化并触发相应的事件如新增文件删除文件修改文件重命名文件等功能。FlieSystemWatcherFileSystemWatcher是 .NET 中用于监听文件系统变化的类位于 System.IO 命名空间下。当指定目录中的文件或子目录发生创建、删除、修改或重命名时它会触发相应事件通知程序。文件或目录的变更包括文件的创建、删除、修改内容、重命名等 。属性变化如文件大小、最后写入时间、最后访问时间、安全权限等 。子目录监控通过设置属性可以递归监控根目录下所有子目录的变更 。过滤特定文件可以通过通配符如 *.txt只监控特定类型的文件 。FileSystemWatcher常用属性如下所示Path表示需要监听的目录路径如D:\Test。Filter表示需要监听的文件类型默认为*.*表示监听所有文件类型。它是一个列表类型可以设置多个需要监听的文件类型。NotifyFilter表识需要监听的变化类型它是NotifyFilters类型的枚举共有几种FileNameDirectoryNameAttributesLastWriteLastAccessCreationTimeSecurity默认是LastWriteFileNameDirectoryName三者的合集。EnableRaisingEvents表示是否启用文件目录监听。IncludeSubdirectories表示是否监听子文件夹目录如果设置为true则循环递归监听子目录。InternalBufferSize 内置缓存字节大小默认为8192字节(8KB)。FileSystemWatcher常用事件如下所示Created当监听的目录中有新增文件或文件夹时触发此事件。Deleted当监听的目录中有删除文件或文件夹时触发此事件。Changed当监听的目录中有文件或文件夹发生改变时触发此事件。Renamed当监听的目录中有文件或文件夹被重命名时触发此事件。Error当控件不能继续监听指定文件目录或内存缓存不足时触发此事件。实例演示首先拖动FileSystemWatcher控件到Form表单中由于FileSystemWatcher控件不需要显示在UI页面中所以在显示底部托盘中选择控件并在控件的属性窗口中查看默认属性如下所示在属性窗口中切换到事件Tab页然后在对应的CreatedDeletedChangedRenamedError事件文件框中双击添加对应的事件处理方法如下所示在Form的Load事件中为FileSystemWatcher控件指定需要监听的路径和监听子目录属性如下所示private void FrmFileSystemWatcher_Load(object sender, EventArgs e) { this.fileSystemWatcher1.Path D:\test; this.fileSystemWatcher1.EnableRaisingEvents true;//是否启用组件 this.fileSystemWatcher1.IncludeSubdirectories true; this.txtFilePath.Text this.fileSystemWatcher1.Path; //this.fileSystemWatcher1.NotifyFilter NotifyFilters.CreationTime;//设置 }在FileSystemWatcher控件的事件处理方法中增加业务输出逻辑如下所示private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e) { this.txtInfo.AppendText(e.FullPath 被修改了 e.ChangeType.ToString() Environment.NewLine); } private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e) { this.txtInfo.AppendText(e.FullPath 被创建了 e.ChangeType.ToString() Environment.NewLine); } private void fileSystemWatcher1_Deleted(object sender, FileSystemEventArgs e) { this.txtInfo.AppendText(e.FullPath 被删除了 e.ChangeType.ToString() Environment.NewLine); } private void fileSystemWatcher1_Error(object sender, ErrorEventArgs e) { this.txtInfo.AppendText(出错了e.GetException().Message Environment.NewLine); } private void fileSystemWatcher1_Renamed(object sender, RenamedEventArgs e) { this.txtInfo.AppendText(e.FullPath 被重命名了 e.ChangeType.ToString() Environment.NewLine); }运行示例软件启动时D:\test目录被监听当手动删除文件时会提示文件被删除吧当修改文件内容时会提示文件被修改了当文件名称被修改时会提示文件被重命名了当从回收站还原被删除的文件时会提示文件被创建了。效果如下所示以上就是《基于.NET的Windows窗体编程之WinForms文件监控》的全部内容旨在抛砖引玉希望可以一起学习共同进步
