文件监听-WatchMonitor
# 由来
很多时候我们需要监听一个文件的变化或者目录的变动,包括文件的创建、修改、删除,以及目录下文件的创建、修改和删除,只能靠轮询方式遍历目录或者定时检查文件的修改事件,这样效率非常低,性能也很差。于是EasyTool便针对其做了简化封装,使监听更简单,也提供了更好的功能,这包括:
- 支持多级目录的监听(WatchService只支持一级目录),可自定义监听目录深度
- 延迟合并触发支持(文件变动时可能触发多次modify,支持在某个时间范围内的多次修改事件合并为一个修改事件)
- 简洁易懂的API方法,一个方法即可搞定监听,无需理解复杂的监听注册机制。
- 多观察者实现,可以根据业务实现多个Watcher来响应同一个事件
# EasyTool.WatchMonitor 类
工具类 WatchMonitor,主要针对FileSystemWatcher
做了封装,针对文件和目录的变动(创建、更新、删除)做一个钩子,在Watcher中定义相应的逻辑来应对这些文件的变化。
WatchMonitor
提供的事件有:
OnFileChanged
文件修改的事件OnFileCreated
文件或目录创建的事件OnFileDeleted
文件或目录删除的事件OnFileRenamed
丢失的事件OnFileError
异常的事件
# 使用示例
static void Main(string[] args)
{
WatchMonitor monitor = new WatchMonitor(@"C:\Temp");
monitor.FileChanged += OnFileChanged;
monitor.FileCreated += OnFileCreated;
monitor.FileDeleted += OnFileDeleted;
monitor.FileMissing += OnFileMissing;
Console.WriteLine("Press any key to stop monitoring...");
Console.ReadKey();
monitor.Dispose();
}
static void OnFileChanged(object sender, FileEventArgs e)
{
Console.WriteLine($"File '{e.FilePath}' was modified.");
}
static void OnFileCreated(object sender, FileEventArgs e)
{
Console.WriteLine($"File '{e.FilePath}' was created.");
}
static void OnFileDeleted(object sender, FileEventArgs e)
{
Console.WriteLine($"File '{e.FilePath}' was deleted.");
}
static void OnFileMissing(object sender, FileEventArgs e)
{
Console.WriteLine($"File '{e.FilePath}' is missing.");
}
上次更新: 2023/04/26, 22:10:06