本文實例講述了C#使用FileSystemWatcher控件實現的文件監控功能。分享給大家供大家參考,具體如下:
FileSystemWatcher
可以使用FileSystemWatcher組件監視文件系統,並對文件系統的改變作出反應。通過使用FileSystemWatcher組件,在特定的文件或目錄被創建、修改或刪除時,可以快速和便捷地啟動業務流程。
例如,如果一組用戶在合作處理一個存儲在服務器共享目錄下的文檔時,可以使用FileSystemWatcher組件編寫應用程序來監視對共享目錄的更改情況。當檢測到更改時,該組件可以運行處理過程,通過電子郵件通知每個用戶。
可以配置組件來監視整個目錄及其內容,或特定目錄下一個特定的文件或一組文件。若要監視所有文件中的更改,應將Filter屬性設置為空字符串("");若要監視特定的文件,應將Filter屬性設置為該文件的文件名(例如,若要監視文件MyDoc.txt中的更改,將Filter屬性設置為"MyDoc.txt");也可以監視特定文件類型中的更改,例如若要監視文本文件中的更改,將Fillter屬性設置為"*.txt"。
【提示】不要忽略隱藏文件。
可監視目錄或文件中的若干種更改。例如,可監視文件或目錄的Attributes、LastWrite的日期和時間或Size的更改。通過將
FileSystemWatcher.NotifyFilter屬性設置為NotifyFilters中的某個值,就可以實現這個目標。
還可以監視文件或目錄的重命名、刪除或創建。例如,若要監視文本文件的重命名,可將Filter屬性設置為"*.txt",並調用一個WaitForChanged方法,並設置該方法中WatcherChangeTypes的值為Renamed。
下面舉例說明。創建一個FileSystemWatche組件來監視運行時指定的目錄。組件被設置用來監視LastWrite和LastAccess時間的更改,以及目錄中文本文件的創建、刪除或重命名。如果文件被更改、創建或刪除,則文件的路徑就會被輸出到控制台。當一個文件被重命名時,舊的和新的路徑都被輸出到控制台。
實例 使用FileSystemWatche組件來監視運行時指定的目錄:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
using
System;
using
System.IO;
public
class
watcher
{
public
static
void
Main(
string
[] args)
{
//如果沒有指定目錄,則退出程序
if
(args.Length!=1)
{
//顯示調用程序的正確方法
Console.WriteLine(
"usage:Watcher.exe(directory)"
);
return
;
}
//創建一個新的FileSystemWatcher並設置其屬性
FileSystemWatcher watcher=
new
FileSystemWatcher();
watcher.Path=args[O];
/*監視LastAcceSS和LastWrite時間的更改以及文件或目錄的重命名*/
watcher.NotifyFilter=NotifyFilters.LastAccess | NotifyFilters.LastWrite |
NotifyFilters.FileName | NotifyFilters.DirectoryName;
//只監視文本文件
watcher.Filter=
"*.txt"
;
//添加事件句柄
//當由FileSystemWatcher所指定的路徑中的文件或目錄的
//大小、系統屬性、最后寫時間、最后訪問時間或安全權限
//發生更改時,更改事件就會發生
watcher.Changed +=
new
FileSystemEventHandler(OnChanged);
//由FileSystemWatcher所指定的路徑中文件或目錄被創建時,創建事件就會發生
watcher.Created +=
new
FileSystemEventHandler(OnChanged);
//當由FileSystemWatcher所指定的路徑中文件或目錄被刪除時,刪除事件就會發生
watcher.Deleted +=
new
FileSystemEventHandler(OnChanged) ;
//當由FileSystemWatcher所指定的路徑中文件或目錄被重命名時,重命名事件就會發生
watcher.Renamed +=
new
RenamedEventHandler(OnRenamed);
//開始監視
watcher.EnableRaisingEvents=
true
;
//等待用戶退出程序
Console.WriteLine(
"Press\'q\' to quit the sample."
);
while
(Console.Read()!=
'q'
);
}
//定義事件處理程序
public
static
void
OnChanged(
object
sender,FileSystemEventArgs e)
{
//指定當文件被更改、創建或刪除時要做的事
Console.WriteLine(
"file:"
+e.FullPath+
""
+e.ChangeType);
}
public
static
void
OnRenamed(
object
sender,RenamedEventArgs e)
{
//指定當文件被重命名時發生的動作
Console.WriteLine(
"Fi]e:{0} renamed to{1}"
,e.OldFullPath,e.FullPath);
}
}
|
更多關於C#相關內容感興趣的讀者可查看本站專題:《C#文件操作常用技巧匯總》、《C#遍歷算法與技巧總結》、《C#程序設計之線程使用技巧總結》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數據結構與算法教程》及《C#面向對象程序設計入門教程》
希望本文所述對大家C#程序設計有所幫助。
