C#使用FileSystemWatcher监控文件夹变化的方法

方予
方予
发布时间:2026-10-14| 6人浏览过
原创

在C#开发中,若需实现对特定路径下文件或目录变更的实时监测(如创建、删除、重命名),可使用系统内置的FileSystemWatcher类。

核心类与基础原理

FileSystemWatcher位于System.IO命名空间下,专门用于监听本地或网络文件的更改通知。该类提供多种事件回调,能够精准响应不同的文件系统动作:

  • Created:文件或文件夹被创建时触发;
  • Deleted:文件或文件夹被删除时触发;
  • Renamed:文件或文件夹被重命名时触发。

这些事件通常对应两种委托签名。以最常见的FileSystemEventHandler为例,其方法签名为void MethodName(Object sender, FileSystemEventArgs e)。其中sender为触发事件的源对象,e包含具体的文件变动信息(如路径、名称)。对于重命名事件,则需使用RenameEventHandler,其参数类型为RenamedEventArgs,除常规信息外还包含OldName属性。

完整代码示例

下面展示一个完整的控制台应用程序,演示如何配置监听器并接收变动通知。

第1步:创建测试环境

首先,在C:\盘下新建一个名为temp的文件夹作为监控目标。该目录用于验证程序是否能正确捕获新文件创建、旧文件删除及文件名修改等操作。

第2步:编写主程序逻辑

新建一个C#控制台项目(.NET Framework或.NET Core/5+均可),将以下代码粘贴至Program.cs中运行。注意,程序需要足够权限才能访问C:\盘根目录下的文件变动。

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 1. 指定要监控的路径
        var watcher = new FileSystemWatcher(@"c:\temp");
        
        // 2. 启用事件触发
        watcher.EnableRaisingEvents = true;

        // 3. 注册事件处理方法
        // Created 和 Deleted 使用标准的 FileSystemEventHandler
        watcher.Created += new FileSystemEventHandler(OnCreated);
        watcher.Deleted += new FileSystemEventHandler(OnDeleted);
        
        // Renamed 使用特殊的 RenamedEventHandler
        watcher.Renamed += new RenamedEventHandler(OnRenamed);

        Console.WriteLine("开始监控 c:\\temp 目录,按任意键退出...");
        
        // 保持主线程不结束,以便持续监听
        Console.ReadKey();
    }

    /// 
    /// 处理文件/文件夹创建事件
    /// 
    static void OnCreated(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"创建: {e.Name}");
    }

    /// 
    /// 处理文件/文件夹删除事件
    /// 
    static void OnDeleted(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"删除: {e.Name}");
    }

    /// 
    /// 处理重命名事件
    /// 
    static void OnRenamed(object sender, RenamedEventArgs e)
    {
        Console.WriteLine($"重命名: 原名称={e.OldName}, 新名称={e.Name}");
    }
}

第3步:简化订阅方式

C#支持更简洁的事件订阅语法。如果你不需要区分不同的处理逻辑,可以使用Lambda表达式或直接引用方法名来减少冗余代码:

// Lambda 简写
watcher.Created += (s, e) => Console.WriteLine(e.Name);

// 直接引用方法
watcher.Created += OnCreated;

第4步:运行与观察结果

启动控制台程序后,进入C:\temp目录进行操作:

  • 新建文件:控制台应立刻输出类似“创建: test.txt”的消息;
  • 删除文件:控制台应立刻输出“删除: ...”;
  • 重命名文件:输出将显示旧的名称和新的名称。

常见问题与优化建议

  1. 防抖处理(Debounce):
    某些操作(如批量复制大文件、杀毒软件扫描)可能在短时间内触发多次变动事件。如果在OnCreated中执行耗时任务,建议使用定时器对事件进行合并过滤,避免频繁调用。
  2. 递归监控:
    默认情况下FileSystemWatcher只监控当前指定层级。如需监控子目录内的变化,将Recursive属性设置为true即可:watcher.Recursive = true;。
  3. 性能消耗:
    由于它是基于底层API轮询机制实现的,在高频变动的大目录上可能会产生较多CPU开销。对于简单的日志读取或轻量级业务逻辑通常没问题,但大规模数据同步建议使用其他方式(如数据库Change Data Capture)。

以上就是C#利用FileSystemWatcher监控文件夹变化的详细内容,更多关于C#文件系统编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。