可以使用FileSystemWatcher組件監(jiān)視文件系統(tǒng),并對(duì)文件系統(tǒng)的改變作出反應(yīng)。通過使用FileSystemWatcher組件,在特定的文件或目錄被創(chuàng)建、修改或刪除時(shí),可以快速和便捷地啟動(dòng)業(yè)務(wù)流程。
例如,如果一組用戶在合作處理一個(gè)存儲(chǔ)在服務(wù)器共享目錄下的文檔時(shí),可以使用FileSystemWatcher組件編寫應(yīng)用程序來監(jiān)視對(duì)共享目錄的更改情況。當(dāng)檢測(cè)到更改時(shí),該組件可以運(yùn)行處理過程,通過電子郵件通知每個(gè)用戶。
可以配置組件來監(jiān)視整個(gè)目錄及其內(nèi)容,或特定目錄下一個(gè)特定的文件或一組文件。若要監(jiān)視所有文件中的更改,應(yīng)將Filter屬性設(shè)置為空字符串("");若要監(jiān)視特定的文件,應(yīng)將Filter屬性設(shè)置為該文件的文件名(例如,若要監(jiān)視文件MyDoc.txt中的更改,將Filter屬性設(shè)置為"MyDoc.txt");也可以監(jiān)視特定文件類型中的更改,例如若要監(jiān)視文本文件中的更改,將Fillter屬性設(shè)置為"*.txt"。
【提示】不要忽略隱藏文件。
可監(jiān)視目錄或文件中的若干種更改。例如,可監(jiān)視文件或目錄的Attributes、LastWrite的日期和時(shí)間或Size的更改。通過將FileSystemWatcher.NotifyFilter屬性設(shè)置為NotifyFilters中的某個(gè)值,就可以實(shí)現(xiàn)這個(gè)目標(biāo)。
還可以監(jiān)視文件或目錄的重命名、刪除或創(chuàng)建。例如,若要監(jiān)視文本文件的重命名,可將Filter屬性設(shè)置為"*.txt",并調(diào)用一個(gè)WaitForChanged方法,并設(shè)置該方法中WatcherChangeTypes的值為Renamed。
下面舉例說明。創(chuàng)建一個(gè)FileSystemWatche組件來監(jiān)視運(yùn)行時(shí)指定的目錄。組件被設(shè)置用來監(jiān)視LastWrite和LastAccess時(shí)間的更改,以及目錄中文本文件的創(chuàng)建、刪除或重命名。如果文件被更改、創(chuàng)建或刪除,則文件的路徑就會(huì)被輸出到控制臺(tái)。當(dāng)一個(gè)文件被重命名時(shí),舊的和新的路徑都被輸出到控制臺(tái)。
【實(shí)例7-7】? 使用FileSystemWatche組件來監(jiān)視運(yùn)行時(shí)指定的目錄。
- using?System; ?
- using?System.IO; ?
- public ? class ?watcher ?
- { ?
- ???? public ? static ? void ?Main(string[]?args) ?
- ????{ ?
- ???????? //如果沒有指定目錄,則退出程序 ?
- ???????? if (args.Length!= 1 ) ?
- ????????{ ?
- ???????????? //顯示調(diào)用程序的正確方法 ?
- ????????????Console.WriteLine( "usage:Watcher.exe(directory)" ); ?
- ???????????? return ; ?
- ????????} ?
- ???????? //創(chuàng)建一個(gè)新的FileSystemWatcher并設(shè)置其屬性 ?
- ????????FileSystemWatcher?watcher= new ?FileSystemWatcher(); ?
- ????????watcher.Path=args[O]; ?
- ???????? /*監(jiān)視LastAcceSS和LastWrite時(shí)間的更改以及文件或目錄的重命名*/ ?
- ????????watcher.NotifyFilter=NotifyFilters.LastAccess?|?NotifyFilters.LastWrite?| ?
- ????????????NotifyFilters.FileName?|?NotifyFilters.DirectoryName; ?
- ???????? //只監(jiān)視文本文件 ?
- ????????watcher.Filter= "*.txt" ; ?
- ???????? //添加事件句柄 ?
- ???????? //當(dāng)由FileSystemWatcher所指定的路徑中的文件或目錄的 ?
- ???????? //大小、系統(tǒng)屬性、最后寫時(shí)間、最后訪問時(shí)間或安全權(quán)限 ?
- ???????? //發(fā)生更改時(shí),更改事件就會(huì)發(fā)生 ?
- ????????watcher.Changed?+= new ?FileSystemEventHandler(OnChanged); ?
- ???????? //由FileSystemWatcher所指定的路徑中文件或目錄被創(chuàng)建時(shí),創(chuàng)建事件就會(huì)發(fā)生 ?
- ????????watcher.Created?+= new ?FileSystemEventHandler(OnChanged); ?
- ???????? //當(dāng)由FileSystemWatcher所指定的路徑中文件或目錄被刪除時(shí),刪除事件就會(huì)發(fā)生 ?
- ????????watcher.Deleted?+= new ?FileSystemEventHandler(OnChanged)?; ?
- ???????? //當(dāng)由FileSystemWatcher所指定的路徑中文件或目錄被重命名時(shí),重命名事件就會(huì)發(fā)生 ?
- ????????watcher.Renamed?+= new ?RenamedEventHandler(OnRenamed); ?
- ???????? //開始監(jiān)視 ?
- ????????watcher.EnableRaisingEvents= true ; ?
- ???????? //等待用戶退出程序 ?
- ????????Console.WriteLine( "Press\'q\'?to?quit?the?sample." ); ?
- ???????? while (Console.Read()!= 'q' ); ?
- ????} ?
- ???? //定義事件處理程序 ?
- ???? public ? static ? void ?OnChanged(object?sender,FileSystemEventArgs?e) ?
- ????{ ?
- ???? //指定當(dāng)文件被更改、創(chuàng)建或刪除時(shí)要做的事 ?
- ????????Console.WriteLine( "file:" +e.FullPath+ "" +e.ChangeType); ?
- ????} ?
- ???? public ? static ? void ?OnRenamed(object?sender,RenamedEventArgs?e) ?
- ????{ ?
- ???? //指定當(dāng)文件被重命名時(shí)發(fā)生的動(dòng)作 ?
- ????????Console.WriteLine( "Fi]e:{0}?renamed?to{1}" ,e.OldFullPath,e.FullPath); ?
- ????} ?
- }?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
