c#使用filesystemwatcher监视文件系统的变化


在C#中,`FileSystemWatcher` 类是一个用于监视文件系统中文件或目录更改的非常有用的组件。以下是一个简单的示例,展示了如何使用 `FileSystemWatcher` 来监视特定目录中的文件变化(如创建、删除、更改等)。


using System;
using System.IO;

class Program
{
    static void Main()
    {
        // 创建一个 FileSystemWatcher 来监视指定目录
        using (FileSystemWatcher watcher = new FileSystemWatcher())
        {
            // 设置监视器要监视的目录
            watcher.Path = @"C:\path\to\watch";

            // 你可以过滤要监视的文件类型
            // 例如,只监视 .txt 文件
            watcher.Filter = "*.txt";

            // 设置监视的事件类型
            watcher.NotifyFilter = NotifyFilters.LastAccess
                                   | NotifyFilters.LastWrite
                                   | NotifyFilters.FileName
                                   | NotifyFilters.DirectoryName;

            // 只添加你感兴趣的事件处理程序
            watcher.Changed += OnChanged;
            watcher.Created += OnChanged;
            watcher.Deleted += OnChanged;
            watcher.Renamed += OnRenamed;

            // 开始监视
            watcher.EnableRaisingEvents = true;

            // 等待用户按 Enter 退出程序
            Console.WriteLine("Press enter to exit the application.");
            Console.ReadLine();
        }
    }

    // 定义事件处理程序来响应文件系统更改
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // 显示发生了什么更改
        Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");
    }

    // 定义事件处理程序来响应文件重命名
    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        // 显示文件重命名事件
        Console.WriteLine($"File: {e.OldFullPath} renamed to {e.FullPath}");
    }
}

这段代码创建了一个 `FileSystemWatcher` 实例来监视 `C:\path\to\watch` 目录(请根据你的需要替换为实际路径)中的 `.txt` 文件。它注册了几个事件处理程序来处理文件更改、创建、删除和重命名事件。当检测到这些事件时,会在控制台中输出相关信息。

注意:`FileSystemWatcher` 组件在监视文件系统更改时可能会遇到一些问题,比如它可能会错过一些更改(尤其是在高负载情况下),或者由于权限问题而无法访问某些目录或文件。因此,在使用时请务必注意这些潜在的问题。