2012-06-17 1 views
21

FileSystemWatcherはフォルダを調べることができ、そのフォルダ内のファイルが変更された場合は変更します。それ。 しかし私は自分のシナリオでどのフィルタとイベントを使うべきか分かりません。フォルダを見て、そのフォルダにファイルが追加されている場合はXYZをしてください...だから私のシナリオでは、既存のファイルが変更されました。これらは無視する必要があります...新しいファイルがそのフォルダに追加された場合にのみXYZを実行してください...新しいファイルを見つけるためにFileSystemWatcherのどのフィルタを使う必要があるのですか?

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

+3

何のための投票ですか?!?! – Bohn

答えて

12

ウォッチャー:

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

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

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

watcher.Created += new FileSystemEventHandler(OnChanged); 

watcher.EnableRaisingEvents = true; 

はその後FileCreatedデリゲートを実装します

+5

ファイルが作成されていて変更されていないことを気にするだけなら、なぜ 'NotifyFilter'をセットするのでしょうか? –

+5

@JeffBridgmanそれは直感的ではありませんが、NotifyFilterはFileSystemWatcherからの通知を微調整する方法として機能します。既定では、NotifyFilterはDirectoryNameに設定されています。ファイル名| LastWrite。これらは、FileSystemWatcherから期待されるコアファイルのアクティビティ(Created、Changed、Deleted、およびRenamed)を取得する機能を提供します。さまざまなイベントをトリガするための入力として監視および使用されるファイル/ディレクトリ属性のスペクトルを増やすように通知フィルタを変更することができます。あなたが推測することができますが、他のフィルタのほとんどは、変更されたイベントにのみなります。 – CobaltBlue

+11

スタックオーバーフローの答えは、究極的に見つけることができる他のほとんどのサイトよりも優れています。 –

3

FileSystemWatcherの詳細な説明についてはこちらをご覧ください:あなたが追加されたファイルを探したい場合は、作成したファイルを検索する必要がありますhttp://www.c-sharpcorner.com/uploadfile/mokhtarb2005/fswatchermb12052005063103am/fswatchermb.aspx

WatcherChangeType列挙体の値を設定して、監視する変更の種類を指定します。可能な値は次のとおりです。

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

また、あなたがちょうど彼らがあなたのために興味深いものではありませんので、ファイルが作成された場合に火災(追加)及びませんが、他のすべてのイベントを実装することをイベントハンドラを配線することがあります。

セットアップ
watcher.Created += new FileSystemEventHandler(OnChanged);