LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

基于.NET的Windows窗体编程之WinForms文件监控

admin
2026年8月31日 12:26 本文热度 201

在实际应用开发中,有时候需要操作本地文件或文件夹,还需监控磁盘目录的变化,比如当新增或删除文件时,提示变更信息,以起到警示作用。合理的文件监控,还可以起到事半功倍的效果,今天我们以一些简单的小例子,简述基于.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;    //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目录被监听,当手动删除文件时,会提示文件被删除吧;当修改文件内容时,会提示文件被修改了;当文件名称被修改时,会提示文件被重命名了;当从回收站还原被删除的文件时,会提示文件被创建了。效果如下所示:


源码获取

关于本系列的完整代码,可以通过gitee上的库进行获取:https://gitee.com/ahsiang/winforms


阅读原文:点击这里


该文章在 2026/8/31 12:26:01 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号