多个可配置的FileSystemWatcher方法

时间:2015-06-12 15:37:19

标签: c#

过去我创建了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
            }

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

1 个答案:

答案 0 :(得分:1)

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

List<FileSystemWatcher> fsWatchers = new List<FileSystemWatcher>();

添加新观察者......

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) {

    }
}