创建同一个 FileSystemWatcher 的多个实例
Posted
技术标签:
【中文标题】创建同一个 FileSystemWatcher 的多个实例【英文标题】:Create multiple instances of the same FileSystemWatcher 【发布时间】:2016-04-01 17:05:09 【问题描述】:我的程序需要监控多个位置,但为每个位置触发相同的代码。由于单个FileSystemWatcher
无法监控多个位置,但是否可以创建多个实例并为每个实例传递文件夹路径?
我无法对每个 FileSystemWatcher
进行硬编码,因为需要及时添加越来越多的位置,而这需要由最终用户完成,因为我必须手动硬编码每次都是新的FileSystemWatcher
。所以我的计划是将文件夹路径保存到一个文件中,程序只为列表中的每个路径创建一个FileSystemWatcher
。但我不知道这是否有可能。
在这里尝试使用工厂方法模式建议: 我收到错误消息:“'List' 不包含 'add' 的定义
public void StartWatchers()
string[] ArrayPaths = new string[2];
List<FileSystemWatcher> watchers = new List<FileSystemWatcher>();
ArrayPaths[0] = @"K:\Daily Record Checker\Test\Test1";
ArrayPaths[1] = @"K:\Daily Record Checker\Test\Test2";
int i = 0;
foreach (String String in ArrayPaths)
watcher.add(MyWatcherFatory(ArrayPaths[i]));
i++;
//Do other stuff....
//....
//Start my watchers...
foreach (FileSystemWatcher watcher in watchers)
Watcher.EnableRaisingEvents = true;
i++;
FileSystemWatcher MyWatcherFatory(string path)
FileSystemWatcher watcher = new FileSystemWatcher(path);
watcher.Changed += Watcher_Created;
watcher.Path = path;
watcher.Filter = "*.csv";
return watcher;
private void Watcher_Created(object sender, FileSystemEventArgs e)
System.Threading.Thread.Sleep(1000);
FileInfo fileInfo = new FileInfo(e.FullPath);
if (!IsFileLocked(fileInfo))
CheckNumberOfRecordsInFile(e.FullPath);
【问题讨论】:
msdn.microsoft.com/en-us/library/… 您更新的代码有“Watcher.add”...您想添加到您的列表中:watchers.Add 我正在编写 Owlsolo 的代码,但将其更改为 hte list 仍会导致“'List使用factory method pattern。
FileSystemWatcher MyWatcherFatory(string path, object additionalParameters)
FileSystemWatcher watcher = new FileSystemWatcher(path);
watcher.Changed += myWatcherChangedMethod;//Attach them to the same listeners,
//Set additional parameters...
return watcher.
编辑:根据您进一步提供的信息:
public void StartWatchers()
string[] ArrayPaths = new string[2];
List<FileSystemWatcher> watchers = new List<FileSystemWatcher>();
ArrayPaths[0] = @"K:\Daily Record Checker\Test\Test1";
ArrayPaths[1] = @"K:\Daily Record Checker\Test\Test2";
int i = 0;
foreach (String String in ArrayPaths)
watchers.Add(MyWatcherFatory(ArrayPaths[i]));
i++;
//Do other stuff....
//....
//Start my watchers...
foreach (FileSystemWatcher watcher in watchers )
watcher.EnableRaisingEvents = true;;
i++;
FileSystemWatcher MyWatcherFatory(string path)
FileSystemWatcher watcher = new FileSystemWatcher(path);
watcher.Changed += Watcher_Created;
watcher.Path = path;
watcher.Filter = "*.csv";
return watcher;
private void Watcher_Created(object sender, FileSystemEventArgs e)
System.Threading.Thread.Sleep(1000);
FileInfo fileInfo = new FileInfo(e.FullPath);
if (!IsFileLocked(fileInfo))
CheckNumberOfRecordsInFile(e.FullPath);
【讨论】:
如何启动返回的观察者?我已经更新了我的问题以显示我尝试实施的内容,但它没有做任何事情。关于我的特定需求,我发现很难理解工厂方法模式,因为没有例子是启动同一个 .net 类的多个实例。 啊,我明白你的更新代码现在正在进行,但是“FileSystemWatcher”不支持“.add”,我不知道这是否意味着这种可能性的结束,或者是否有错字/缺失的系统等。 **"'List以上是关于创建同一个 FileSystemWatcher 的多个实例的主要内容,如果未能解决你的问题,请参考以下文章
FileSystemWatcher - 在删除时,复制一个文件