可以使用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時間的更改,以及目錄中文本文件的創建、刪除或重命名。如果文件被更改、創建或刪除,則文件的路徑就會被輸出到控制臺。當一個文件被重命名時,舊的和新的路徑都被輸出到控制臺。
【實例7-7】? 使用FileSystemWatche組件來監視運行時指定的目錄。
-
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); ?
-
????} ?
-
}?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

