FileSystemWatcherの使い方の詳細

11820 ワード

FileSystemWatcherの使い方の詳細
FileSystemWatcherコントロールの主な機能:
指定したファイルまたはディレクトリのファイルの作成、削除、変更、名前変更などのアクティビティを監視します.モニタリングが必要なファイルタイプとファイル属性の変更のタイプを動的に定義できます.
1.一般的な基本プロパティ:
(1)Path:監視するディレクトリのパスを設定します.
(2)IncludeSubdirectories:指定したパスのサブディレクトリをカスケード監視するかどうかを設定します.
(3)Filter:ディレクトリで監視するファイルの種類を決定するフィルタ文字列を設定します.
(4)NotifyFilter:ファイルのどの属性の変動がChangedイベントをトリガーするかを設定し、同時に複数の属性の変動を監視して「または」で組み合わせることができます.(デフォルトは、NotifyFilter.LastWrite|NotifyFilter.FileName|NotifyFilter.DirectoryNameの組合せ)
子:Attributes--ファイルまたはフォルダのプロパティ.CreationTime--ファイルまたはフォルダの作成時間.Directory Name--ディレクトリ名.(共通)FileName--ファイル名.(共通)LastAccess--ファイルまたはフォルダが最後に開いた日付.LastWrite--最後にファイルまたはフォルダにコンテンツを書き込んだ日付.Security--ファイルまたはフォルダのセキュリティ設定.「Size」--ファイルまたはフォルダのサイズ.(共通)
(5)EnableRaisingEvents:モニタを開始するかどうかを設定します.(デフォルトはfalse)
2.共通イベント:
(1)Changed:ファイルとディレクトリを変更するときに発生する、イベントをトリガーするファイル変更が必要なプロパティをNotifyFilterプロパティで設定できます.
(2)Created:ファイルとディレクトリの作成時に発生します. 
(3)Deleted:ファイルまたはディレクトリを削除するときに発生します. 
(4)Renamed:ファイルまたはディレクトリの名前変更中に発生します.
(5)FileSystemEventArgsオブジェクト:
メンバー:Name:影響を受けるファイルまたはディレクトリの名前を取得します.注:カスケード・モニタリング・サブディレクトリの場合、この値は、影響を受けるファイル名だけでなく、モニタリング・ディレクトリの次のディレクトリから影響を受けるファイルへのパスです.
FullPath:影響を受けるファイルまたはディレクトリの完全に限定されたパスを取得します. 
ChangeType:影響を受けるファイルまたはディレクトリの発生イベントタイプを取得します.
サブアイテム:All--ファイルまたはフォルダの作成、削除、変更または名前変更.Changed--ファイルまたはフォルダの変更.変更のタイプには、サイズ、プロパティ、セキュリティ設定、最近の書き込み時間、最近のアクセス時間の変更が含まれます.Created--ファイルまたはフォルダの作成.Deleted--ファイルまたはフォルダの削除.Renamed--ファイルまたはフォルダの名前を変更します. 
(6)RenamedEventArgsオブジェクト:
メンバー:Name:影響を受けるファイルまたはディレクトリの新しい名前を取得します. 
OldName:影響を受けるファイルまたはディレクトリの古い名前を取得します.
FullPath:影響を受けるファイルまたはディレクトリの完全に限定されたパスを取得します.
OldFullPath:影響を受けるファイルまたはディレクトリの前の完全に限定されたパスを取得します.
ChangeType:影響を受けるファイルまたはディレクトリの発生イベントタイプを取得します.
サブアイテム:All--ファイルまたはフォルダの作成、削除、変更または名前変更.Changed--ファイルまたはフォルダの変更.変更のタイプには、サイズ、プロパティ、セキュリティ設定、最近の書き込み時間、最近のアクセス時間の変更が含まれます.Created--ファイルまたはフォルダの作成.Deleted--ファイルまたはフォルダの削除.Renamed--ファイルまたはフォルダの名前を変更します. 
 
 1 private delegate void setLogTextDelegate(FileSystemEventArgs e); //    FileSystemEventArgs     ,    Created,Deleted Changed     UI  。
 2 
 3 private delegate void renamedDelegate(RenamedEventArgs e);  //    RenamedEventArgs     ,    Renamed   UI  。
 4 
 5 FileSystemWatcher fsw= new FileSystemWatcher();
 6 
 7 fsw.Path = “C:\\”;   //         
 8 
 9 fsw.IncludeSubdirectories = true;   //    C          
10 
11 fsw.Filter = "*.txt|*.doc|*.jpg";   //         
12 
13 fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;   //        、              Changed  
14 
15 fsw.Created += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle);  //
16 
17 fsw.Deleted += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle);
18 
19 fsw.Changed += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle);
20 
21 fsw.Renamed += new RenamedEventHandler(this.fileSystemWatcher_Renamed);  //
22 
23 fsw.EnableRaisingEvents = true;  //    
24 
25 private void fileSystemWatcher_EventHandle(object sender, FileSystemEventArgs e)  //              
26 {
27      if (this.listView1.InvokeRequired)  //       
28       {
29            this.listView1.Invoke(new setLogTextDelegate(setLogText), new object[] { e });   //          UI     
30       }
31 }
32 
33 private void fileSystemWatcher_Renamed(object sender,RenamedEventArgs e)   //              
34 {
35       if (this.listView1.InvokeRequired) //       
36        { 
37            this.listView1.Invoke(new renamedDelegate(setRenamedLogText), new object[] { e });  //          UI     
38        }
39 }
40 
41 private void setLogText(FileSystemEventArgs e)  //  UI  
42 {
43       ListViewItem lvi = new ListViewItem();
44 
45       lvi.SubItems.Add(e.Name);   //       
46 
47       lvi.SubItems.Add(e.ChangeType.ToString());   //          (   Created、Changed、Deleted)
48 
49       lvi.SubItems.Add(e.FullPath);     //          
50 
51       this.listView1.Items.Add(lvi);
52 }
53 
54  private void setRenamedLogText(RenamedEventArgs e)  //  UI  
55 {
56        ListViewItem lvi = new ListViewItem();
57 
58        lvi.SubItems.Add(e.OldName);   //         
59 
60        lvi.SubItems.Add(e.ChangeType.ToString());  //           (Rename)
61 
62        lvi.SubItems.Add(e.Name);   //         
63 
64        lvi.SubItems.Add(e.OldFullPath);     //          
65 
66        lvi.SubItems.Add(e.FullPath);  //           (        )
67 
68        this.fileEventLog_lvw.Items.Add(lvi);
69 
70  }

ポイント:
1.FileSystemWatcherクラス自体がマルチスレッドのコントロールであるため、FileSystemWatcherをインスタンス化するたびに自動的にスレッドが作成されます.
2、RenameEventArgsオブジェクトの名前を変更し、イベント転送を作成、変更、削除するのはFileEventArgsオブジェクトなので、2つの依頼を宣言する必要があります.
3、同時に複数のファイル(例えば監視システム全体)を監視する必要がある場合、FileSystemWatcher配列を作成するだけで、各ファイルは1つのFileSystemWatcherで監視する.
インスタンス効果:
以上のC#ファイルの監視のソースコードを置いて、みんなの学習に役立つことを望みます:
ソースのダウンロードアドレス:http://download.csdn.net/detail/czw2010/4912798