基于.NET的Windows窗体编程之WinForms文件监控
|
admin
2026年8月31日 12:26
本文热度 51
|
在实际应用开发中,有时候需要操作本地文件或文件夹,还需监控磁盘目录的变化,比如当新增或删除文件时,提示变更信息,以起到警示作用。合理的文件监控,还可以起到事半功倍的效果,今天我们以一些简单的小例子,简述基于.NET的Windows窗体编程中FileSystemWatcher控件的相关应用,仅供学习分享使用,如有不足之处,还请指正。
概述
在WinForms开发框架中,要实现磁盘上文件目录监控,主要是通过以下控件实现:
- FileSystemWatcher,主要用于监听指定目录下文件系统的变化,并触发相应的事件,如新增文件,删除文件,修改文件,重命名文件等功能。
FileSystemWatcher
FileSystemWatcher是 .NET 中用于监听文件系统变化的类,位于 System.IO 命名空间下。当指定目录中的文件或子目录发生创建、删除、修改或重命名时,它会触发相应事件通知程序。
- 文件或目录的变更:包括文件的创建、删除、修改内容、重命名等 。
- 属性变化:如文件大小、最后写入时间、最后访问时间、安全权限等 。
- 子目录监控:通过设置属性,可以递归监控根目录下所有子目录的变更 。
- 过滤特定文件:可以通过通配符(如 *.txt)只监控特定类型的文件 。
FileSystemWatcher常用属性如下所示:
- Path,表示需要监听的目录路径,如D:\Test。
- Filter,表示需要监听的文件类型,默认为"*.*",表示监听所有文件类型。它是一个列表类型,可以设置多个需要监听的文件类型。
- NotifyFilter,表识需要监听的变化类型,它是NotifyFilters类型的枚举,共有几种,FileName,DirectoryName,Attributes,LastWrite,LastAccess,CreationTime,Security,默认是LastWrite,FileName,DirectoryName三者的合集。
- EnableRaisingEvents,表示是否启用文件目录监听。
- IncludeSubdirectories,表示是否监听子文件夹目录,如果设置为true,则循环递归监听子目录。
- InternalBufferSize 内置缓存字节大小,默认为8192字节(8KB)。
FileSystemWatcher常用事件如下所示:
- Created,当监听的目录中,有新增文件或文件夹时触发此事件。
- Deleted,当监听的目录中,有删除文件或文件夹时触发此事件。
- Changed,当监听的目录中,有文件或文件夹发生改变时触发此事件。
- Renamed,当监听的目录中,有文件或文件夹被重命名时触发此事件。
- Error,当控件不能继续监听指定文件目录或内存缓存不足时,触发此事件。
实例演示
首先拖动FileSystemWatcher控件到Form表单中,由于FileSystemWatcher控件不需要显示在UI页面中,所以在显示底部托盘中,选择控件并在控件的属性窗口中,查看默认属性,如下所示:
在属性窗口中切换到事件Tab页,然后在对应的Created,Deleted,Changed,Renamed,Error事件文件框中,双击添加对应的事件处理方法,如下所示:
在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; }
在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目录被监听,当手动删除文件时,会提示文件被删除吧;当修改文件内容时,会提示文件被修改了;当文件名称被修改时,会提示文件被重命名了;当从回收站还原被删除的文件时,会提示文件被创建了。效果如下所示:
源码获取
阅读原文:点击这里
该文章在 2026/8/31 12:26:01 编辑过