Search code examples
c#.netfilesystemwatcher

Filesystem Watcher - Multiple folders


I want to use filesystemwatcher to monitor multiple folders as follows. My below code only watches one folder:

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;
}

But the above code monitors one folder and has not effect on the other folder. What is the reason for that ?


Solution

  • EnableRaisingEvents is default false, you can try to put it before the Changed amd make a new watcher for each folder:

    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = watch_folder;
    watcher.NotifyFilter = NotifyFilters.LastWrite;
    watcher.Filter = "*.xml";
    watcher.EnableRaisingEvents = true;
    watcher.Changed += new FileSystemEventHandler(convert);