在C#中,若要同时监控多个文件夹的内容变更,可以使用System.IO.FileSystemWatcher
类来实现。以下是一个简化的示例,展示了如何创建一个FileSystemWatcher
实例并对多个文件夹进行监控:
1using System;
2using System.IO;
3
4public class FolderMonitor
5{
6 private List<FileSystemWatcher> watchers = new List<FileSystemWatcher>();
7
8 public void StartMonitoring(string[] directories)
9 {
10 foreach (var directory in directories)
11 {
12 var watcher = new FileSystemWatcher(directory);
13
14 // 设置需要监控的更改类型
15 watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
16
17 // 指定事件处理程序
18 watcher.Created += OnChanged;
19 watcher.Changed += OnChanged;
20 watcher.Deleted += OnChanged;
21 watcher.Renamed += OnRenamed;
22
23 // 启动监控
24 watcher.EnableRaisingEvents = true;
25
26 // 将此观察者添加到列表中,以便后续管理
27 watchers.Add(watcher);
28 }
29 }
30
31 private void OnChanged(object source, FileSystemEventArgs e)
32 {
33 var watcher = (FileSystemWatcher)source;
34 Console.WriteLine($"在文件夹'{watcher.Path}'中检测到{e.ChangeType}事件: 文件名 '{e.FullPath}'");
35
36 // 在此处添加处理文件变更的逻辑
37 }
38
39 private void OnRenamed(object source, RenamedEventArgs e)
40 {
41 var watcher = (FileSystemWatcher)source;
42 Console.WriteLine($"在文件夹'{watcher.Path}'中检测到重命名事件: 旧文件名 '{e.OldFullPath}', 新文件名 '{e.FullPath}'");
43
44 // 在此处添加处理文件重命名的逻辑
45 }
46
47 public void StopMonitoring()
48 {
49 foreach (var watcher in watchers)
50 {
51 watcher.EnableRaisingEvents = false;
52 watcher.Dispose();
53 }
54 watchers.Clear();
55 }
56}
57
58// 使用示例:
59var monitor = new FolderMonitor();
60monitor.StartMonitoring(new[] { @"C:\Folder1", @"C:\Folder2", @"C:\Folder3" });
61
62// ...等待一段时间...
63
64monitor.StopMonitoring();
我们创建了一个FolderMonitor
类,它维护了一个FileSystemWatcher
对象的列表。在StartMonitoring
方法中,我们遍历需要监控的文件夹数组,并为每个文件夹创建一个新的FileSystemWatcher
实例。设置好需要监控的更改类型,并为各个事件(如创建、修改、删除和重命名)注册事件处理程序。
当需要停止监控时,调用StopMonitoring
方法,它会遍历所有观察者并停止事件通知,然后释放资源。