当前位置:首页 > C# > 正文

C#文件监控实战指南(使用FileSystemWatcher实现文件系统实时监听)

在日常开发中,我们经常需要对文件系统的变动做出响应,比如当某个目录下的文件被创建、修改或删除时自动执行某些操作。C# 提供了一个非常强大的类——FileSystemWatcher,它能帮助我们轻松实现C#文件监控功能。

C#文件监控实战指南(使用FileSystemWatcher实现文件系统实时监听) C#文件监控 FileSystemWatcher教程 C#文件系统监听 实时文件变化检测 第1张

什么是 FileSystemWatcher?

FileSystemWatcher 是 .NET Framework 中的一个类,位于 System.IO 命名空间下。它可以监视指定目录中的文件或子目录的更改,并在发生创建、删除、重命名或修改等事件时触发相应的事件处理程序。

第一步:创建一个简单的文件监控程序

下面我们从零开始,用 Visual Studio 创建一个控制台应用程序,演示如何使用 FileSystemWatcher 实现 实时文件变化检测

1. 新建项目

打开 Visual Studio,选择“创建新项目” → “控制台应用(.NET Core 或 .NET Framework)” → 命名为 FileMonitorDemo

2. 编写核心代码

Program.cs 文件中,替换为以下代码:

using System;using System.IO;class Program{    static void Main(string[] args)    {        // 要监控的目录路径(请根据实际情况修改)        string pathToWatch = @"C:\MyMonitoredFolder";        // 确保目录存在        if (!Directory.Exists(pathToWatch))        {            Directory.CreateDirectory(pathToWatch);            Console.WriteLine($"已创建监控目录:{pathToWatch}");        }        // 创建 FileSystemWatcher 实例        using (FileSystemWatcher watcher = new FileSystemWatcher())        {            watcher.Path = pathToWatch;                        // 监控所有文件(*.*)            watcher.Filter = "*.*";                        // 设置要监听的变更类型            watcher.NotifyFilter = NotifyFilters.LastAccess                                  | NotifyFilters.LastWrite                                 | NotifyFilters.FileName                                 | NotifyFilters.DirectoryName;            // 注册事件处理程序            watcher.Changed += OnChanged;            watcher.Created += OnCreated;            watcher.Deleted += OnDeleted;            watcher.Renamed += OnRenamed;            // 开始监控            watcher.EnableRaisingEvents = true;            Console.WriteLine($"正在监控目录:{pathToWatch}");            Console.WriteLine("按任意键退出...");            Console.ReadKey();        }    }    // 文件/目录被修改    private static void OnChanged(object source, FileSystemEventArgs e)    {        Console.WriteLine($"[修改] {e.FullPath}");    }    // 文件/目录被创建    private static void OnCreated(object source, FileSystemEventArgs e)    {        Console.WriteLine($"[创建] {e.FullPath}");    }    // 文件/目录被删除    private static void OnDeleted(object source, FileSystemEventArgs e)    {        Console.WriteLine($"[删除] {e.FullPath}");    }    // 文件/目录被重命名    private static void OnRenamed(object source, RenamedEventArgs e)    {        Console.WriteLine($"[重命名] 从 {e.OldFullPath} 到 {e.FullPath}");    }}

关键参数说明

  • Path:要监控的目录路径。
  • Filter:指定要监控的文件类型,例如 *.txt 只监控文本文件。
  • NotifyFilter:设置要监听的变更类型,如文件名、最后写入时间等。
  • EnableRaisingEvents:设为 true 才会真正开始监听。

注意事项与常见问题

1. 权限问题:确保程序有权限访问目标目录。

2. 缓冲区溢出:如果短时间内发生大量文件变更,可能触发 Error 事件。建议注册该事件并适当增大 InternalBufferSize(默认 8KB)。

3. 跨平台兼容性:在 .NET Core / .NET 5+ 中,FileSystemWatcher 在 Linux 和 macOS 上也支持,但行为可能略有不同。

总结

通过本教程,你已经掌握了如何使用 C# 的 FileSystemWatcher 类来实现 C#文件系统监听。无论是日志监控、自动备份还是热加载配置,这项技术都非常实用。

记住,良好的错误处理和资源释放(如使用 using 语句)是编写健壮监控程序的关键。

关键词回顾:C#文件监控FileSystemWatcher教程C#文件系统监听实时文件变化检测