当前位置: 欣欣网 > 码农

C#中监控文件夹变动的利器:FileSystemWatcher类

2024-02-27码农

在C#中,如果你想要监控一个文件夹内文件的变动情况,比如文件的创建、删除、修改等,你可以使用 FileSystemWatcher 类。 FileSystemWatcher 类提供了简单的方式来监视文件系统的更改。它位于 System.IO 命名空间中,并允许你指定要监视的目录以及你感兴趣的事件类型。

一、FileSystemWatcher类简介

FileSystemWatcher 类提供了一个异步机制来监视文件系统的更改。你可以通过它注册事件处理器来响应文件或目录的更改,如:

  • Created :当在指定目录中创建新文件或目录时发生。

  • Deleted :当在指定目录中删除文件或目录时发生。

  • Changed :当在指定目录中更改文件时发生。

  • Renamed :当在指定目录中重命名文件或目录时发生。

  • 二、使用FileSystemWatcher类

    要使用 FileSystemWatcher 类,你需要:

    1. 创建一个 FileSystemWatcher 实例。

    2. 设置它的 Path 属性,指定要监视的目录。

    3. (可选)设置其他属性,如 Filter NotifyFilter 等,来过滤和定制监控。

    4. 为感兴趣的事件注册事件处理器。

    5. 调用 EnableRaisingEvents 方法开始监视。

    三、示例代码

    下面是一个简单的示例,展示了如何使用 FileSystemWatcher 类来监控一个文件夹中文件的变动情况:

    using System;
    using System.IO;
    classProgram
    {
    staticvoidMain()
    {
    // 创建FileSystemWatcher实例
    FileSystemWatcher watcher = new FileSystemWatcher();
    // 设置要监视的目录
    watcher.Path = @"C:\YourFolderToWatch";
    // 过滤条件,例如只监控.txt文件
    watcher.Filter = "*.txt";
    // 通知过滤器,设置需要监控的事件类型
    watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
    // 注册事件处理器
    watcher.Created += OnFileCreated;
    watcher.Deleted += OnFileDeleted;
    watcher.Changed += OnFileChanged;
    watcher.Renamed += OnFileRenamed;
    // 开始监控
    watcher.EnableRaisingEvents = true;
    // 保持控制台开启,以便接收事件
    Console.WriteLine("Press 'Enter' to quit the sample.");
    Console.ReadLine();
    // 停止监控
    watcher.EnableRaisingEvents = false;
    }
    // 当文件被创建时触发
    privatestaticvoidOnFileCreated(object source, FileSystemEventArgs e)
    {
    Console.WriteLine($"File: {e.FullPath} has been created.");
    }
    // 当文件被删除时触发
    privatestaticvoidOnFileDeleted(object source, FileSystemEventArgs e)
    {
    Console.WriteLine($"File: {e.FullPath} has been deleted.");
    }
    // 当文件被修改时触发
    privatestaticvoidOnFileChanged(object source, FileSystemEventArgs e)
    {
    Console.WriteLine($"File: {e.FullPath} has been changed.");
    }
    // 当文件被重命名时触发
    privatestaticvoidOnFileRenamed(object source, RenamedEventArgs e)
    {
    Console.WriteLine($"File: {e.OldFullPath} has been renamed to {e.FullPath}.");
    }
    }










    在这个例子中, FileSystemWatcher 实例被设置为监视 C:\YourFolderToWatch 目录下所有 .txt 文件的创建、删除、修改和重命名事件。每当这些事件发生时,相应的事件处理器就会被调用,并在控制台输出相应的消息。

    四、注意事项

  • 确保你的应用程序有权限访问和监控指定的文件夹。

  • FileSystemWatcher 可能不会捕获所有文件系统事件,特别是在高负载或高并发的情况下。

  • 为了减少资源使用,可以在事件处理完成后使用 Stop() 方法来停止 FileSystemWatcher ,并在需要时重新启动它。

  • 如果你的应用程序需要处理大量文件或目录事件,可能需要考虑使用其他机制,如Windows API调用,或者使用第三方库来增强性能。

  • 五、总结

    FileSystemWatcher 类是一个强大且易用的工具,用于在C#中监控文件夹中的文件变动。通过合理地使用它,你可以实现自动备份、日志记录、实时同步等功能。在使用时,请确保处理好事件,并考虑到性能和资源使用的因素。