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一堆數,最終在佇列...