惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
月光博客
月光博客
博客园 - 司徒正美
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
量子位
Recent Announcements
Recent Announcements
V
V2EX
P
Proofpoint News Feed
小众软件
小众软件
云风的 BLOG
云风的 BLOG
腾讯CDC
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
B
Blog
博客园_首页
GbyAI
GbyAI
博客园 - Franky

博客园 - 老码识途呀

基于.NET的Windows窗体编程之WinForms自定义控件(1) 基于.NET的Windows窗体编程之WinForms滑块与上下控件 基于.NET的Windows窗体编程之WinForms音频控件 基于.NET的Windows窗体编程之WinForms图像控件 基于.NET的Windows窗体编程之WinForms提示控件 基于.NET的Windows窗体编程之WinForms时间控件 基于.NET的Windows窗体编程之WinForms图表控件 基于.NET的Windows窗体编程之WinForms输入与显示 基于.NET的Windows窗体编程之WinForms菜单工具栏 基于.NET的Windows窗体编程之WinForms打印 基于.NET的Windows窗体编程之WinForms对话框 基于.NET的Windows窗体编程之WinForms列表控件 基于.NET的Windows窗体编程之WinForms数据表格 基于.NET的Windows窗体编程之WinForms事件简介 基于.NET的Windows窗体编程之WinForms布局简介 基于.NET的Windows窗体编程之WinForms控件简介 基于.NET的Windows窗体编程之WinForms入门简介 推荐一款基于.NET和百度飞桨的OCR识别组件 新书速递,手把手教你WPF入门与开发 推荐一种并发线程中资源同步常用方法 推荐一种手动设置异步线程等待机制的解决方案 推荐一种异步线程执行过程中更新进度的方法 推荐一款基于.NET的进程间数据交互经典解决方案 推荐一款线程or进程间数据同步解决方案 推荐一款代码规范检查(CodeReview)神器 推荐一款高性能状态机管理解决方案 推荐一款进程间高速交换数据的解决方案 推荐一款基于.NET的进程间通信框架 推荐一款基于EF-Core的分库分表利器 推荐一种程序崩溃闪退或卡死的分析方法
基于.NET的Windows窗体编程之WinForms文件监控
老码识途呀 · 2026-08-31 · via 博客园 - 老码识途呀

在实际应用开发中,有时候需要操作本地文件或文件夹,还需监控磁盘目录的变化,比如当新增或删除文件时,提示变更信息,以起到警示作用。合理的文件监控,还可以起到事半功倍的效果,今天我们以一些简单的小例子,简述基于.NET的Windows窗体编程中FileSystemWatcher控件的相关应用,仅供学习分享使用,如有不足之处,还请指正。

image

概述

在WinForms开发框架中,要实现磁盘上文件目录监控,主要是通过以下控件实现:

  • FileSystemWatcher,主要用于监听指定目录下文件系统的变化,并触发相应的事件,如新增文件,删除文件,修改文件,重命名文件等功能。

FlieSystemWatcher

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页面中,所以在显示底部托盘中,选择控件并在控件的属性窗口中,查看默认属性,如下所示:

image

在属性窗口中切换到事件Tab页,然后在对应的Created,Deleted,Changed,Renamed,Error事件文件框中,双击添加对应的事件处理方法,如下所示:

image

在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目录被监听,当手动删除文件时,会提示文件被删除吧;当修改文件内容时,会提示文件被修改了;当文件名称被修改时,会提示文件被重命名了;当从回收站还原被删除的文件时,会提示文件被创建了。效果如下所示:

image

以上就是《基于.NET的Windows窗体编程之WinForms文件监控》的全部内容,旨在抛砖引玉,希望可以一起学习,共同进步!!!