首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个可配置的FileSystemWatcher方法

多个可配置的FileSystemWatcher方法
EN

Stack Overflow用户
提问于 2015-06-12 23:37:19
回答 1查看 865关注 0票数 0

在过去,我创建了Windows服务,它通过引用如下配置文件来监控一个目录,其中的路径是可配置的:

代码语言:javascript
复制
fileSystemWatcher1.Path = ConfigurationManager.AppSettings["WatchPath1"];

我还看到了通过定义多个fileSystemWatcher方法来实现多个可配置路径。

代码语言:javascript
复制
        fileSystemWatcher1.Path = ConfigurationManager.AppSettings["WatchPath1"];
        fileSystemWatcher2.Path = ConfigurationManager.AppSettings["WatchPath2"];
        fileSystemWatcher3.Path = ConfigurationManager.AppSettings["WatchPath3"];

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

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

动态创建的示例代码:

代码语言:javascript
复制
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
            }

这个是可能的吗?如果是这样,我该如何着手实现这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2015-06-12 23:53:51

存储FileSystemWatcher对象列表,您可以在启动类时对其进行初始化。

代码语言:javascript
复制
List<FileSystemWatcher> fsWatchers = new List<FileSystemWatcher>();

要添加新的监视器...

代码语言:javascript
复制
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上的所有事件来稍微简化它。

代码语言:javascript
复制
private void file_OnFileEvent(object sender, FileSystemEventArgs e) {
    String path = e.FullPath;
    if (e.ChangeType == WatcherChangeTypes.Changed) {

    } else if (e.ChangeType == WatcherChangeTypes.Created) {

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30807006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档