FileSystemWatcher
类在 C# 中是一个非常实用的类,用于监视文件系统中文件或目录的更改,并可以触发事件来响应这些更改。这些更改包括文件或目录的创建、删除、更改以及重命名等。以下是如何在 C# 中使用 FileSystemWatcher
的基本步骤:
目录
1. 引入命名空间
首先,需要引入 System.IO
命名空间,因为 FileSystemWatcher
类定义在这个命名空间中。
using System;
using System.IO;
2. 创建 FileSystemWatcher 实例
接着,创建一个 FileSystemWatcher
的实例,并设置其属性,如要监视的目录(Path
)、要监视的文件类型(Filter
)、以及是否监视子目录(IncludeSubdirectories
)等。
using (var watcher = new FileSystemWatcher())
{
watcher.Path = @"C:\path\to\directory";
// 监视所有文件
watcher.Filter = "*.*";
// 设置为 true 以监视子目录
watcher.IncludeSubdirectories = true;
// 根据需要设置其他属性
// watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
// 等...
// 绑定事件处理程序
watcher.Changed += OnChanged;
watcher.Created += OnCreated;
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed;
watcher.Error += OnError;
// 开始监视
watcher.EnableRaisingEvents = true;
// 等待用户输入或其他操作
Console.WriteLine("Press enter to exit the application.");
Console.ReadLine();
}
3. 编写事件处理程序
为 FileSystemWatcher
触发的事件(如 Changed
、Created
、Deleted
、Renamed
和 Error
)编写事件处理程序。
private static void OnChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");
}
private static void OnCreated(object source, FileSystemEventArgs e)
{
Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");
}
private static void OnDeleted(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}");
}
private static void OnError(object source, ErrorEventArgs e)
{
PrintException(e.GetException());
}
private static void PrintException(Exception ex)
{
if (ex != null)
{
Console.WriteLine($"Message : {ex.Message}");
PrintException(ex.InnerException);
}
}
4. 注意事项
FileSystemWatcher
并不保证捕获到所有文件系统事件,因为文件系统通知是基于底层操作系统功能的,可能会受到操作系统限制和延迟的影响。FileSystemWatcher
的Path
属性必须是一个有效的目录路径。- 监视子目录(
IncludeSubdirectories
属性)可能会消耗大量资源,特别是当子目录结构很深或很大时。 FileSystemWatcher
触发的事件(尤其是Changed
事件)可能会因为多种原因而触发,如文件属性更改或文件内容更改等。你可能需要更细致地检查触发事件的原因。
通过使用 FileSystemWatcher
,可以很容易地在 C# 应用程序中监视文件系统变化,并作出相应的响应。