引言
存储在磁盘中的文件,由于对其操作,文件会产生变化。如何监视文件系统的变化,如文件的创建、删除、修改和重命名等。.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 欢迎收藏和转载此博客中的博文,但是请注明出处,给笔者一个与大家交流的空间。谢谢大家。 |




浙公网安备 33010602011771号