我想使用filesystemwatcher监视多个文件夹,如下所示。我的下面的代码只看一个文件夹:
public static void Run()
{
string[] args = System.Environment.GetCommandLineArgs();
if (args.Length < 2)
{
Console.WriteLine("Usage: Watcher.exe PATH [...] [PATH]");
return;
}
List<string> list = new List<string>();
for (int i = 1; i < args.Length; i++)
{
list.Add(args[i]);
}
foreach (string my_path in list)
{
WatchFile(my_path);
}
Console.WriteLine("Press \'q\' to quit the sample.");
while (Console.Read() != 'q') ;
}
private static void WatchFile(string watch_folder)
{
watcher.Path = watch_folder;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.xml";
watcher.Changed += new FileSystemEventHandler(convert);
watcher.EnableRaisingEvents = true;
}
但是上面的代码监视一个文件夹并且对另一个文件夹没有影响。这是什么原因?
答案 0 :(得分:2)
单个FileSystemWatcher
只能监控单个文件夹。您需要多个 FileSystemWatchers
才能实现此目的。
private static void WatchFile(string watch_folder)
{
// Create a new watcher for every folder you want to monitor.
FileSystemWatcher fsw = new FileSystemWatcher(watch_folder, "*.xml");
fsw.NotifyFilter = NotifyFilters.LastWrite;
fsw.Changed += new FileSystemEventHandler(convert);
fsw.EnableRaisingEvents = true;
}
请注意,如果您想稍后修改这些观察者,您可能希望通过将其添加到列表或其他内容来维护对每个已创建的FileSystemWatcher
的引用。
答案 1 :(得分:1)
EnableRaisingEvents
是默认false
,您可以尝试将其放在更改之前,并为每个文件夹创建一个新的观察程序:
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = watch_folder;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.xml";
watcher.EnableRaisingEvents = true;
watcher.Changed += new FileSystemEventHandler(convert);