在过去,我创建了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
}这个是可能的吗?如果是这样,我该如何着手实现这一点呢?
发布于 2015-06-12 23:53:51
存储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) {
}
}https://stackoverflow.com/questions/30807006
复制相似问题