1

filesystemwatcherを使用して、次のように複数のフォルダーを監視したいと思います。以下のコードは1つのフォルダーのみを監視します。

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

ただし、上記のコードは1つのフォルダーを監視し、他のフォルダーには影響しません。その理由は何ですか?

4

2 に答える 2

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、リストなどに追加して作成された各ウォッチャーへの参照を維持することをお勧めします。

于 2013-03-26T11:10:22.310 に答える
1

EnableRaisingEventsはデフォルトですfalse。変更されたamdが各フォルダーの新しいウォッチャーを作成する前に配置してみてください。

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = watch_folder;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.xml";
watcher.EnableRaisingEvents = true;
watcher.Changed += new FileSystemEventHandler(convert);
于 2013-03-26T11:12:35.350 に答える