C FileSystemWatcher用法詳解

2022-02-16 19:11:23 字數 4047 閱讀 5507

2023年08月28日 17:36:52 夜之子 閱讀數 35327

filesystemwatcher控制項主要功能:

監控指定檔案或目錄的檔案的建立、刪除、改動、重新命名等活動。可以動態地定義需要監控的檔案型別及檔案屬性改動的型別。

1.常用的幾個基本屬性:

(1) path :設定要監視的目錄的路徑。

(2) includesubdirectories :設定是否級聯監視指定路徑中的子目錄。

(3) filter :設定篩選字串,用於確定在目錄中監視哪些型別的檔案。

(4) notifyfilter :設定檔案的哪些屬性的變動會觸發changed事件,同時監控多個屬性變動可以按「或」組合。(預設值為 notifyfilter.lastwrite | notifyfilter.filename | notifyfilter.directoryname 組合)

子項: attributes           --  檔案或資料夾的屬性。  

creationtime   --  檔案或資料夾的建立時間。  

directoryname --  目錄名。(常用) 

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   --  檔案或資料夾的重新命名。 

演示原始碼:

private delegate void setlogtextdelegate(filesystemeventargs e); //宣告傳遞filesystemeventargs物件的委託,用於檔案created,deleted和changed變動時更新ui介面。private delegate void renameddelegate(renamedeventargs e); //宣告傳遞renamedeventargs物件的委託,用於檔案renamed時更新ui介面。filesystemwatcher fsw= new filesystemwatcher();fsw.path = 「c:\\」; //設定監控的檔案目錄

fsw.includesubdirectories = true; //設定監控c盤目錄下的所有子目錄

fsw.notifyfilter = notifyfilters.filename | notifyfilters.directoryname | notifyfilters.size; //設定檔案的檔名、目錄名及檔案的大小改動會觸發changed事件

fsw.created += new filesystemeventhandler(this.filesystemwatcher_eventhandle); //繫結事件觸發後處理資料的方法。

fsw.deleted += new filesystemeventhandler(this.filesystemwatcher_eventhandle);

fsw.changed += new filesystemeventhandler(this.filesystemwatcher_eventhandle);

fsw.renamed += new renamedeventhandler(this.filesystemwatcher_renamed); //重新命名事件與增刪改傳遞的引數不一樣。

fsw.enableraisingevents = true; //啟動監控

private void filesystemwatcher_eventhandle(object sender, filesystemeventargs e) //檔案增刪改時被呼叫的處理方法

); //使用委託將方法封送到ui主線程處理

}

}

private void filesystemwatcher_renamed(object sender,renamedeventargs e) //檔案重新命名時被呼叫的處理方法

); //使用委託將方法封送到ui主線程處理

}

}

private void setlogtext(filesystemeventargs e) //更新ui介面

private void setrenamedlogtext(renamedeventargs e) //更新ui介面

重點:1.、因為filesystemwatcher類本身就是多執行緒的控制項,也就是每例項化乙個filesystemwatcher自動就會建立一條執行緒。

2、我們需要利用委託進行跨執行緒更新ui介面,因為重新命名事件傳遞的是renameeventargs物件,而建立、修改、刪除事件傳遞的是fileeventargs物件,所以需要宣告兩個委託。

3、如果需要同時監控多個檔案(如監控系統全盤),只需要建立filesystemwatcher陣列,每個檔案用乙個filesystemwatcher進行監控。

例項效果:

C FileSystemWatcher檔案監控

屬性 說明path 設定要監控的目錄或者檔案 notifyfilter 它是notifyfilters列舉值的組合,notifyfilters列舉要監控的內容,它的列舉值是要監控的檔案或資料夾屬性。它的列舉值有,attributes creationtime directoryname filena...

nginx limit req zone用法詳解

nginx可以使用ngx http limit req module模組的limit req zone指令進行限流訪問,防止使用者惡意攻擊刷爆伺服器。ngx http limit req module模組是nginx預設安裝的,所以直接配置即可。首先,在nginx.conf檔案中的http模組下配置...

優先佇列priority queue 用法詳解

優先佇列是佇列的一種,不過它可以按照自定義的一種方式 資料的優先順序 來對佇列中的資料進行動態的排序 每次的push和pop操作,佇列都會動態的調整,以達到我們預期的方式來儲存。例如 我們常用的操作就是對資料排序,優先佇列預設的是資料大的優先順序高 所以我們無論按照什麼順序push一堆數,最終在佇列...