引言
存储在磁盘中的文件,由于对其操作,文件会产生变化。如何监视文件系统的变化,如文件的创建、删除、修改和重命名等。.NET框架是否提供什么相关类库。本文了解C#如何使用FileSystemWatcher实现监控磁盘文件变化。
FileSystemWatcher
1、概述
FileSystemWatcher是一个位于System.IO中的类库,主要用于侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。如文件的创建、删除、修改和重命名等。
2、基本属性
-
EnableRaisingEvents
决定对象在收到改变通知时是否提交事件,true表示将提交改变事件;false表示不提交改变事件。
-
Filter
用于过滤掉某些类型的文件发生的变化。例如,如需监控txt文件的修改、新建、删除时提交通知,则设置该属性为 *.txt 。
-
Path
用于设置需要监控哪个文件目录。例如,如需监控C:\Temp目录,则设置该属性为 C:\Temp。
-
IncludeSubDirectories
决定是否应该监控子目录中发生的改变,true表示监控需包含子目录;false表示监控不需包含子目录。
3、基本事件
-
Changed
表示监控目录中的文件被修改时,触发此事件。由于文件保存时,它的其它属性也会发生改变,所以事件会被提交多次。
-
Created
表示当监控目录有新建文件时,触发此事件。
注:
常见的文件系统操作可能会引发多个事件。 例如,移动文件是一项复杂的操作,可以能会引发多个 OnChanged、OnDeleted和OnCreated 事件。 如果没有正确处理这种情况的代码,就可能出现异常。
-
Deleted
表示当监控目录有文件被删除时,触发此事件。
-
Renamed
表示当监控目录有文件的名称被修改时,触发此事件。
示例
用于监视 C:\Logs 目录下,关于 *.log 文件的变化的示例:
namespace Fountain.WinConsole.FileWatcherDemo
{
internal class Program
{
static void Main(string[] args)
{
// 创建一个 Mutex 以防止多个实例同时运行
using (var mutex = new Mutex(true, "Fountain.WinConsole.FileWatcherDemo.exe", out bool createdNew))
{
if (!createdNew)
{
Console.WriteLine($"应用程序已在运行中...");
return;
}
// 创建 FileSystemWatcher 监控
var fileSystemWatcher = new FileSystemWatcher
{
// 监视 log 文件变化
Filter = "*.log",
// 监视目录
Path = @"C:\Logs",
// 是否包含子目录
IncludeSubdirectories = true,
// 通知时是否提交事件
EnableRaisingEvents = true
};
//
fileSystemWatcher.Changed += MonikerOnChange;
//
fileSystemWatcher.Created += MonikerOnCreated;
//
while (true)
{
Thread.Sleep(1000);
}
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void MonikerOnChange(object sender, FileSystemEventArgs e)
{
// 处理文件更改事件
Console.WriteLine($"发生变更的文件: {e.FullPath}");
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void MonikerOnCreated(object sender, FileSystemEventArgs e)
{
// 处理文件创建事件
Console.WriteLine($"新创建的文件: {e.FullPath}");
}
}
}
小结
以上是FileSystemWatcher在C#中实现监控文件夹和文件的使用方法,希望对您有所收获,如有不到之处,请多多包涵。
![]() |
Austin Liu 刘恒辉
Project Manager and Software Designer E-Mail:lzhdim@163.com Blog:https://lzhdim.cnblogs.com 欢迎收藏和转载此博客中的博文,但是请注明出处,给笔者一个与大家交流的空间。谢谢大家。 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
2016-12-01 5、项目间的沟通协调 - PMO项目管理办公室
2016-12-01 4、项目的培训 - PMO项目管理办公室
2016-12-01 3、项目资源的提供 - PMO项目管理办公室
2016-12-01 2、项目标准的制定 - PMO项目管理办公室
2008-12-01 基于XML的数据库总体分析
2008-12-01 如何在网页中制作虚线表格
2008-12-01 ASP.NET如何防范SQL注入攻击