日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

使用.NET FileSystemWatcher对象监控磁盘文件目录的改变

發(fā)布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用.NET FileSystemWatcher对象监控磁盘文件目录的改变 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文(英文):http://www.techrepublic.com/article/use-the-net-filesystemwatcher-object-to-monitor-directory-changes-in-c/6165137

?

許多情況下,如果創(chuàng)建或修改一個文件,系統(tǒng)需要執(zhí)行某些任務。例如,在一個數(shù)據(jù)庫中插入文件的系統(tǒng)就是如此。

在這種情況下,程序必須監(jiān)控目錄中新建立的文件。如果目錄中新建了一個文件,程序必須提取這個文件、進行解析、再把它插入到數(shù)據(jù)庫中。

許多時候,這類功能要通過“調查”目錄并列舉上次調查后任何新建的文件來完成。在.NET Framework中,微軟為開發(fā)者提供另一種連續(xù)調查一個目錄中的新建文件的方法——FileSystemWatcher對象

FileSystemWatcher對象為你完成目錄監(jiān)控工作。

如果新建、更新或刪除一個文件,FileSystemWatcher將提交一個事 件,通知你發(fā)生了一項改變。

這樣,新建一個文件后,你的程序立即就知道可以使用這個文件。


FileSystemWatcher基礎

在應用FileSystemWatcher對象之前,你必須了解這個對象的一些基本屬性和事件。

毫無疑問,這個對象的最重要的屬性為“EnableRaisingEvents”屬性。這個屬性決定對象在收到改變通知時是否提交事件。

如果EnableRaisingEvents屬性設為false,對象將不會提交改變事件。如果設為true,它將提交改變事件。

下面是你在應用FileSystemWatcher對象時將要用到的其它一些重要屬性/事件:

屬性:

  • Path——這個屬性告訴FileSystemWatcher它需要監(jiān)控哪條路徑。例如,如果我們將這個屬性設為“C:\\Temp”,對象就監(jiān)控那個目錄發(fā)生的所有改變。
  • IncludeSubDirectories——這個屬性說明FileSystemWatcher對象是否應該監(jiān)控子目錄中發(fā)生的改變。
  • Filter——這個屬性允許你過濾掉某些類型的文件發(fā)生的變化。例如,如果我們只希望在TXT文件被修改/新建/刪除時提交通知,可以將這個屬性設為“*txt”。在處理高流量或大型目錄時,使用這個屬性非常方便。

事件

  • Changed——當被監(jiān)控的目錄中有一個文件被修改時,就提交這個事件。值得注意的是,這個事件可能會被提交多次,即使文件的內容僅僅發(fā)生一項改變。這是由于在保存文件時,文件的其它屬性也發(fā)生了改變。
  • Created——當被監(jiān)控的目錄新建一個文件時,就提交這個事件。如果你計劃用這個事件移動新建 的事件,你必須在事件處理器中寫入一些錯誤處理代碼,它能處理當前文件被其它進程使用的情況。之所以要這樣做,是因為Created事件可能在建立文件的 進程釋放文件之前就被提交。如果你沒有準備正確處理這種情況的代碼,就可能出現(xiàn)異常。
  • Deleted——當被監(jiān)控的目錄中有一個文件被刪除,就提交這個事件。
  • Renamed——當被監(jiān)控的目錄中有一個文件被重命名,就提交這個事件。

:如果你沒有將EnableRaisingEvents設為真,系統(tǒng)不會提交任何一個事件。

如果有時FileSystemWatcher對象似乎無法工作,請首先檢查EnableRaisingEvents,確保它被設為True。

?

事件處理

當FileSystemWatcher調用一個事件處理器時,它包含兩個自變量——一個叫做“sender”的對象和一個叫做“e”的 FileSystemEventArgs對象。我們感興趣的自變量為FileSystemEventArgs自變量。這個對象中包含有提交事件的原因。以 下是FileSystemEventArgs對象的一些屬性:

屬性:

  • Name——這個屬性中使事件被提交的文件的名稱。其中并不包含文件的路徑——只包含使用事件被提交的文件或目錄名稱。
  • ChangeType——這是一個WatcherChangeTypes,它指出要提交哪個類型的事件。其有效值包括:
    ○ Changed
    ○ Created
    ○ Deleted
    ○ Renamed
  • FullPath——這個屬性中包含使事件被提交的文件的完整路徑,包括文件名和目錄名。

代碼實例

列表A列出了FileSystemWatcher對象的一個簡單應用實例。在這個例子中,我們監(jiān)控“C:\\Temp”目錄中是否建立了*.TXT文件。

這可能是FileSystemWatcher的最簡單用法。

列表A

publicvoid CreateWatcher()

{

//創(chuàng)建FileSystemWatcher對象

FileSystemWatcher watcher = newFileSystemWatcher();

//設置過濾只監(jiān)控txt文件

watcher.Filter = "*.txt";

//添加一個文件創(chuàng)建事件

watcher.Created += new

FileSystemEventHandler(watcher_FileCreated);

//設置監(jiān)控的路徑

watcher.Path = @"C:Temp";

//開啟文件監(jiān)控

watcher.EnableRaisingEvents = true;

}

private void watcher_FileCreated(object sender, FileSystemEventArgs e)

{

  Console.WriteLine("A new *.txt file has been created!");

}

?

這篇文章下載版本的樣本項目中還提供了另外一些實例。

?

應用

最初,FileSystemWatcher的用途可能并不明顯。當然,如果一個文件或目錄發(fā)生改變,它會向我們發(fā)出警報,但在哪些情況下我們需要這類信息呢?

如果一個系統(tǒng)允許客戶端上傳文件進行處理,這時可能就要用到FileSystemWatcher對象。

盡管很明顯我們已經進入Web服務和SOA時 代,但許多系統(tǒng)仍然要將一些文件插入到某些位置,不管是FTP服務器或網絡共享文件夾中。

我已經將FileSystemWatcher對象應用到這種類型的系統(tǒng)中,雖然并不是完全沒有出錯,但它在監(jiān)控目錄變化方面確實有一定的優(yōu)勢。

如果你想讓兩個文件保持同步,這時也可以用到FileSystemWatcher對象。你可以用FileSystemWatcher同時監(jiān)控這兩個文件的位置,如果其中一個出現(xiàn)更新,就提交一個Changed事件;然后你就可以將這些改變復制到其它系統(tǒng)/文件中。

如果你的系統(tǒng)有任何功能需要進行文件或目錄監(jiān)控,你必須仔細了解那個組件,看是否可以使用FileSystemWatcher對象。在我的應用過程中,這個對象至少為送交給系統(tǒng)的每個文件節(jié)省了10秒鐘的時間。


?

?

另附廣告:女朋友的淘寶網店,為她做宣傳,希望大家別介意,http://iyseek.taobao.com? 歡迎大家逛逛,嘿嘿!

如有需要幫助,請聯(lián)系MSN:zheng331773812@hotmail.com(上班時在線)?? QQ:331773812

歡迎大家共同交流!

轉載于:https://www.cnblogs.com/jsonzheng/archive/2011/06/20/2085053.html

總結

以上是生活随笔為你收集整理的使用.NET FileSystemWatcher对象监控磁盘文件目录的改变的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。