web-dev-qa-db-ja.com

新しいファイルを見つけるためにFileSystemWatcherのどのフィルターを使用する必要がありますか

これまでのところ、FileSystemWatcherはフォルダーを調べることができ、そのフォルダー内のファイルのいずれかが変更、変更、.etc ...された場合、それを処理できることを知っています。しかし、シナリオで使用するフィルターとイベントがわかりません。フォルダーを監視します。ファイルがそのフォルダーに追加されている場合は、XYZを実行します...したがって、私のシナリオでは、既存のファイルが変更されてもかまいません。 、etc ..これらは無視する必要があります...新しいファイルがそのフォルダに追加された場合にのみXYZを実行します...

このシナリオでは、どのイベントとフィルターをお勧めしますか?

24
Bohn

ウォッチャーを設定します。

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "Blah";

watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
    | NotifyFilters.FileName;

watcher.Created += new FileSystemEventHandler(OnChanged);

watcher.EnableRaisingEvents = true;

次に、FileCreatedデリゲートを実装します。

private void OnChanged(object source, FileSystemEventArgs e) {
    Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}
14
David Brabant

FileSystemWatcherの詳細な説明については、こちらをご覧ください: http://www.c-sharpcorner.com/uploadfile/mokhtarb2005/fswatchermb12052005063103am/fswatchermb.aspx

追加されたファイルを探す場合は、作成されたファイルを探す必要があります。

WatcherChangeType列挙体の値を設定することにより、監視する変更のタイプを指定します。可能な値は次のとおりです。

  • すべて:ファイルまたはフォルダーの作成、削除、変更、または名前の変更。
  • 変更:ファイルまたはフォルダーの変更。変更の種類には、サイズ、属性、セキュリティ設定、最終書き込み、および最終アクセス時間の変更が含まれます。
  • 作成済み:ファイルまたはフォルダーの作成。
  • 削除済み:ファイルまたはフォルダーの削除。
  • 名前の変更:ファイルまたはフォルダーの名前の変更。

また、ファイルが作成(追加)された場合に起動するイベントハンドラーを接続するだけで、他のすべてのイベントは興味がないため実装しない場合があります。

watcher.Created += new FileSystemEventHandler(OnChanged);
3

以下のコメント付きのコードは、うまくいけばあなたのニーズを満たすかもしれません。

public void CallingMethod() {

         using(FileSystemWatcher watcher = new FileSystemWatcher()) {
          //It may be application folder or fully qualified folder location
          watcher.Path = "Folder_Name";

          // Watch for changes in LastAccess and LastWrite times, and
          // the renaming of files or directories.
          watcher.NotifyFilter = NotifyFilters.LastAccess |
           NotifyFilters.LastWrite |
           NotifyFilters.FileName |
           NotifyFilters.DirectoryName;

          // Only watch text files.if you want to track other types then mentioned here
          watcher.Filter = "*.txt";

          // Add event handlers.for monitoring newly added files          
          watcher.Created += OnChanged;


          // Begin watching.
          watcher.EnableRaisingEvents = true;

         }


        }

        // Define the event handlers.
        private static void OnChanged(object source, FileSystemEventArgs e) {
        // Specify what is done when a file is  created with these properties below
        // e.FullPath , e.ChangeType
        }
0
Humayoun_Kabir