跳到主要内容

C# 文件监控

介绍

在开发应用程序时,有时需要监控文件系统中的更改,例如文件的创建、修改或删除。C# 提供了 FileSystemWatcher 类,专门用于监控指定目录中的文件系统更改。通过使用 FileSystemWatcher,你可以轻松地响应文件系统中的变化,从而执行相应的操作。

本文将逐步介绍如何使用 FileSystemWatcher 类,并提供代码示例和实际应用场景。

FileSystemWatcher 类

FileSystemWatcher 类位于 System.IO 命名空间中,用于监控指定目录中的文件系统更改。它可以监控以下事件:

  • 文件的创建 (Created)
  • 文件的修改 (Changed)
  • 文件的删除 (Deleted)
  • 文件的重命名 (Renamed)

基本用法

首先,你需要创建一个 FileSystemWatcher 实例,并设置要监控的目录和文件类型。然后,你可以订阅相关的事件来处理文件系统的更改。

csharp
using System;
using System.IO;

class Program
{
static void Main()
{
// 创建一个 FileSystemWatcher 实例
FileSystemWatcher watcher = new FileSystemWatcher();

// 设置要监控的目录
watcher.Path = @"C:\MyFolder";

// 设置要监控的文件类型
watcher.Filter = "*.txt";

// 启用事件监控
watcher.EnableRaisingEvents = true;

// 订阅事件
watcher.Created += OnCreated;
watcher.Changed += OnChanged;
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed;

Console.WriteLine("Press 'Enter' to exit.");
Console.ReadLine();
}

private static void OnCreated(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"File created: {e.FullPath}");
}

private static void OnChanged(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"File changed: {e.FullPath}");
}

private static void OnDeleted(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"File deleted: {e.FullPath}");
}

private static void OnRenamed(object sender, RenamedEventArgs e)
{
Console.WriteLine($"File renamed: {e.OldFullPath} to {e.FullPath}");
}
}

代码解释

  1. 创建 FileSystemWatcher 实例:我们创建了一个 FileSystemWatcher 对象,并设置了要监控的目录 (Path) 和文件类型 (Filter)。

  2. 启用事件监控:通过设置 EnableRaisingEventstrue,我们启用了事件监控。

  3. 订阅事件:我们订阅了 CreatedChangedDeletedRenamed 事件,并分别定义了处理这些事件的方法。

  4. 事件处理方法:每个事件处理方法都会在控制台输出相应的消息,显示文件的变化情况。

实际应用场景

假设你正在开发一个应用程序,需要监控某个目录中的日志文件。每当有新的日志文件创建或现有日志文件被修改时,你希望立即处理这些文件。使用 FileSystemWatcher,你可以轻松实现这一功能。

csharp
watcher.Path = @"C:\Logs";
watcher.Filter = "*.log";
watcher.Created += OnLogFileCreated;
watcher.Changed += OnLogFileChanged;

private static void OnLogFileCreated(object sender, FileSystemEventArgs e)
{
// 处理新创建的日志文件
Console.WriteLine($"New log file created: {e.FullPath}");
}

private static void OnLogFileChanged(object sender, FileSystemEventArgs e)
{
// 处理修改的日志文件
Console.WriteLine($"Log file changed: {e.FullPath}");
}

注意事项

警告

FileSystemWatcher 可能会触发多个 Changed 事件,尤其是在文件被频繁修改时。为了避免重复处理,你可能需要在事件处理逻辑中添加一些去重机制。

提示

如果你需要监控多个目录或文件类型,可以创建多个 FileSystemWatcher 实例,并分别设置它们的 PathFilter 属性。

总结

通过 FileSystemWatcher 类,你可以轻松监控文件系统中的更改,并响应这些更改执行相应的操作。本文介绍了 FileSystemWatcher 的基本用法,并提供了一个实际应用场景的示例。

附加资源

练习

  1. 修改示例代码,使其只监控 .csv 文件的创建和修改。
  2. 尝试在 FileSystemWatcher 中添加去重机制,避免重复处理 Changed 事件。

希望本文能帮助你理解并掌握 C# 文件监控的基本概念和用法。继续练习和探索,你将能够更熟练地使用 FileSystemWatcher 来处理文件系统中的各种变化。