C#中的FileSystemWatcher类是一个非常实用的组件,主要用于监控文件系统的更改。它可以监控文件夹和文件的变化,例如文件被创建、删除、重命名或者修改等事件。通过使用FileSystemWatcher,开发者可以在文件系统变化时,及时响应并执行相应的操作。
我们来看一下FileSystemWatcher的一些核心属性和事件处理方法。FileSystemWatcher的一个关键属性是EnableRaisingEvents,它决定了是否会在有文件系统改变事件发生时触发事件处理器。如果设置为false,则不会触发任何事件,只有当它设置为true时,才会根据定义的监控条件触发事件。
Path属性用于指定要监控的文件夹路径。例如,如果设置Path为"C:\Temp",则FileSystemWatcher将监控C:\Temp目录下的所有改变。而IncludeSubdirectories属性决定监控范围是否包括子目录。如果该属性被设置为true,则 FileSystemWatcher会监控Path属性指定路径下的所有子目录中的文件更改。
Filter属性则用于筛选特定类型文件的更改。例如,如果只希望监控TXT文件的创建、修改和删除,可以将Filter属性设置为“*.txt”。
FileSystemWatcher类定义了几个事件,以响应文件系统的不同更改类型。当监控目录中的文件发生变化时,Changed事件被触发。这个事件可能会被触发多次,因为通常一个文件被保存时,它的大小、最后写入时间等属性也可能发生变化。
当监控目录中新建一个文件时,FileSystemWatcher会触发Created事件。需要注意的是,在处理Created事件时,需要考虑到文件可能还被创建它的进程使用中。因此,在移动或处理这个文件前,应该编写错误处理代码。
Deleted事件在监控目录中某个文件被删除时触发。而Renamed事件则在文件被重命名时触发。
在编写事件处理器时,会传递两个参数:sender和e。其中sender参数表示触发事件的对象,而e参数是一个FileSystemEventArgs类型的对象。FileSystemEventArgs对象中的Name属性表示触发事件的文件或目录名称,不包含路径。ChangeType属性是一个枚举值,指出发生事件的类型,有效值包括Changed、Created、Deleted和Renamed。FullPath属性包含触发事件的文件或目录的完整路径。
我们通过一个简单的示例代码来理解FileSystemWatcher的使用:
```csharp
using System;
using System.IO;
class Program
{
static void Main(string[] args)
{
WatcherStrat(@"D:\spring\Program", "*.*");
Console.ReadKey();
}
private static void WatcherStrat(string path, string filter)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = path;
watcher.Filter = filter;
watcher.Changed += new FileSystemEventHandler(OnProcess);
watcher.EnableRaisingEvents = true; // 确保事件能够被触发
watcher.Created += (sender, e) =>
{
// 这里可以添加处理文件创建事件的代码
Console.WriteLine($"文件 {e.FullPath} 被创建。");
};
watcher.Deleted += (sender, e) =>
{
// 这里可以添加处理文件删除事件的代码
Console.WriteLine($"文件 {e.FullPath} 被删除。");
};
watcher.Renamed += (sender, e) =>
{
// 这里可以添加处理文件重命名事件的代码
Console.WriteLine($"文件从 {e.OldFullPath} 重命名为 {e.FullPath}。");
};
watcher.EnableRaisingEvents = true; // 再次确认事件触发
}
private static void OnProcess(object sender, FileSystemEventArgs e)
{
// 处理文件改变事件
Console.WriteLine($"文件 {e.FullPath} 被 {e.ChangeType.ToString()}。");
}
}
```
以上示例展示了如何创建一个FileSystemWatcher实例,如何配置它以监控一个特定目录下的文件变化,并且如何为不同类型的文件系统更改事件编写事件处理器。通过这个示例,我们可以看到FileSystemWatcher如何帮助我们实时监控文件系统的变化,并在变化发生时立即采取行动。这对于需要及时响应文件系统更改的程序来说非常有用,例如日志文件监控、数据备份以及实时数据同步等场景。