多个可配置的FileSystemWatcher方法

在过去,我创建了Windows服务,通过引用这样的配置文件来监视可配置路径的一个目录:

fileSystemWatcher1.Path = ConfigurationManager.AppSettings["WatchPath1"]; 

我还通过定义多个fileSystemWatcher方法来观察多个可配置路径。

  fileSystemWatcher1.Path = ConfigurationManager.AppSettings["WatchPath1"]; fileSystemWatcher2.Path = ConfigurationManager.AppSettings["WatchPath2"]; fileSystemWatcher3.Path = ConfigurationManager.AppSettings["WatchPath3"]; 

上面的工作如果我事先知道我可能会监控多少个文件夹,那么我的问题是,当我不知道需要监控多少文件夹时,我可以采取什么方法来实现这种动态? 我想要做的是继续使用配置或XML文件,并为每个条目创建FileSystemWatcher与文件中指定的路径。

我还需要能够为每个FileSystemWatcher动态创建一个方法,以便在触发文件系统事件时采取特定的操作。

动态创建的示例代码:

 private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e) { Library.WriteErrorLog("New file detected in watch folder. File: " + e.FullPath); // Do stuff with file } 

这可能吗? 如果是这样我怎么能实现这个目标呢?

存储FileSystemWatcher对象的列表,在启动该类时初始化该对象。

 List fsWatchers = new List(); 

要添加新的观察者……

 public void AddWatcher(String wPath) { FileSystemWatcher fsw = new FileSystemWatcher(); fsw.Path = wPath; fsw.Created += file_OnCreated; fsw.Changed += file_OnChanged; fsw.Deleted += file_OnDeleted; fsWatchers.Add(fsw); } private void file_OnDeleted(object sender, FileSystemEventArgs e) { } private void file_OnChanged(object sender, FileSystemEventArgs e) { } private void file_OnCreated(object sender, FileSystemEventArgs e) { } 

在每个事件处理程序中,如果需要直接与它进行交互,则将发送者强制转换为FileSystemWatcher。 要获取完整路径,请在事件args对象(e)上使用get方法。

通过将单个事件处理程序分配给FileSystemWatcher上的所有事件,您可以稍微简化一下。

 private void file_OnFileEvent(object sender, FileSystemEventArgs e) { String path = e.FullPath; if (e.ChangeType == WatcherChangeTypes.Changed) { } else if (e.ChangeType == WatcherChangeTypes.Created) { } }