多个可配置的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) { } }