FileSystemWatcher 文件监控

原文链接:https://www.cnblogs.com/ysmc/p/18798027

介绍

FileSystemWatcher 是一个强大的 .NET 类,它允许您监听文件系统的变化,如文件或目录的创建、删除、修改和重命名。这个类特别有用于需要实时监控文件变化的应用程序,比如自动备份工具或系统监控软件

官方文档:传送门

代码示例

惯例,直接上代码,这里需要注意的一点,文件的 Change 会被触发多次,可能会导致文件的占用,建议等待一小会,避免文件调用异常,非必须,按照时间情况调整

我这里是使用 IHostedService 去开启监控的,主要是为了可以按需开启或者停止监控

 1 public class FileSystemWatcherHostedService : IHostedService
 2 {
 3     private readonly FileSystemWatcher _fileWatcher;
 4     private readonly string _path = "需要监控的目录";
 5 
 6     public FileSystemWatcherHostedService()
 7     {
 8         _fileWatcher = new FileSystemWatcher(_path)
 9         {
10             Filter = "*.json", //监控的文件类型
11             InternalBufferSize = 65536, //缓冲区大小
12             IncludeSubdirectories = true // 包括子文件夹
13         };
14     }
15 
16     public async Task StartAsync(CancellationToken cancellationToken)
17     {
18         _fileWatcher.Changed += OnFileChanged; //文件修改事件
19         _fileWatcher.EnableRaisingEvents = true; //启用事件
20         await Task.CompletedTask;
21     }
22 
23     private void OnFileChanged(object sender, FileSystemEventArgs e)
24     {
25         Thread.Sleep(100); //等待文件写入完成,避免读取到不完整的文件,或者文件被占用,可以根据实际情况调整
26         //处理文件修改事件
27     }
28 
29     public Task StopAsync(CancellationToken cancellationToken)
30     {
31         _fileWatcher.EnableRaisingEvents = false; //停止事件
32         _fileWatcher.Dispose(); //释放资源
33 
34         return Task.CompletedTask;
35     }
36 }

Change 多次触发处理

未完待续......

posted @ 2025-03-28 14:43  一事冇诚  阅读(12169)  评论(0)    收藏  举报