C# 文件监控
介绍
在开发应用程序时,有时需要监控文件系统中的更改,例如文件的创建、修改或删除。C# 提供了 FileSystemWatcher
类,专门用于监控指定目录中的文件系统更改。通过使用 FileSystemWatcher
,你可以轻松地响应文件系统中的变化,从而执行相应的操作。
本文将逐步介绍如何使用 FileSystemWatcher
类,并提供代码示例和实际应用场景。
FileSystemWatcher 类
FileSystemWatcher
类位于 System.IO
命名空间中,用于监控指定目录中的文件系统更改。它可以监控以下事件:
- 文件的创建 (
Created
) - 文件的修改 (
Changed
) - 文件的删除 (
Deleted
) - 文件的重命名 (
Renamed
)
基本用法
首先,你需要创建一个 FileSystemWatcher
实例,并设置要监控的目录和文件类型。然后,你可以订阅相关的事件来处理文件系统的更改。
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}");
}
}
代码解释
-
创建
FileSystemWatcher
实例:我们创建了一个FileSystemWatcher
对象,并设置了要监控的目录 (Path
) 和文件类型 (Filter
)。 -
启用事件监控:通过设置
EnableRaisingEvents
为true
,我们启用了事件监控。 -
订阅事件:我们订阅了
Created
、Changed
、Deleted
和Renamed
事件,并分别定义了处理这些事件的方法。 -
事件处理方法:每个事件处理方法都会在控制台输出相应的消息,显示文件的变化情况。
实际应用场景
假设你正在开发一个应用程序,需要监控某个目录中的日志文件。每当有新的日志文件创建或现有日志文件被修改时,你希望立即处理这些文件。使用 FileSystemWatcher
,你可以轻松实现这一功能。
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
实例,并分别设置它们的 Path
和 Filter
属性。
总结
通过 FileSystemWatcher
类,你可以轻松监控文件系统中的更改,并响应这些更改执行相应的操作。本文介绍了 FileSystemWatcher
的基本用法,并提供了一个实际应用场景的示例。
附加资源
练习
- 修改示例代码,使其只监控
.csv
文件的创建和修改。 - 尝试在
FileSystemWatcher
中添加去重机制,避免重复处理Changed
事件。
希望本文能帮助你理解并掌握 C# 文件监控的基本概念和用法。继续练习和探索,你将能够更熟练地使用 FileSystemWatcher
来处理文件系统中的各种变化。