C#中FileSystemWatcher的使用教程
開局一張圖,在 System.IO 下的 FileSystemWatcher 常用于監(jiān)視文件系統(tǒng)的變更,當(dāng)文件系統(tǒng)中的文件或者文件夾被修改會(huì)自動(dòng)觸發(fā)相應(yīng)的回調(diào)事件。
為了能夠了解 FileSystemWatcher 是怎么運(yùn)作的,你可以指定一個(gè)被監(jiān)視的文件夾,當(dāng)被監(jiān)視的文件夾修改后,大概會(huì)觸發(fā)如下的一些事件。
- Changed: 當(dāng)文件或者文件夾已經(jīng)完成修改時(shí)觸發(fā)此事件
- Created:當(dāng)文件或者文件夾已經(jīng)成功創(chuàng)建觸發(fā)此事件
- Deleted:當(dāng)文件或者文件夾已經(jīng)成功刪除觸發(fā)此事件
- Error:當(dāng)變更的過(guò)程中發(fā)生錯(cuò)誤觸發(fā)此事件。
- Renamed:當(dāng)文件或者文件夾已經(jīng)成功被重命名時(shí)觸發(fā)此事件
創(chuàng)建一個(gè)簡(jiǎn)單的 file 監(jiān)視
接下來(lái)我們?cè)?Visual Studio 中創(chuàng)建一個(gè) Console 程序,用來(lái)了解如何進(jìn)行文件監(jiān)視,不過(guò)建議把 Console 部署成 Windows Service,這樣方便在系統(tǒng)中常駐監(jiān)控,一旦被監(jiān)視的路徑發(fā)生變更就會(huì)自動(dòng)發(fā)出通知事件。
該說(shuō)的都說(shuō)了,接下來(lái)一起研究代碼吧。
static void Main(string[] args) { string path = @"D:\IDG"; MonitorDirectory(path); Console.ReadKey(); }
下面的代碼片段展示了 MonitorDirectory 方法的內(nèi)部邏輯,這個(gè)方法可用于監(jiān)視指定的文件夾并且當(dāng)文件夾變更時(shí)觸發(fā)事件,可以看到文件夾路徑是通過(guò)參數(shù)傳進(jìn)去的。
private static void MonitorDirectory(string path) { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(); fileSystemWatcher.Path = path; fileSystemWatcher.Created += FileSystemWatcher_Created; fileSystemWatcher.Renamed += FileSystemWatcher_Renamed; fileSystemWatcher.Deleted += FileSystemWatcher_Deleted; fileSystemWatcher.EnableRaisingEvents = true; }
可以著重了解一下上面的 event 是如何被灌入的,而且我還寫了一句 fileSystemWatcher.EnableRaisingEvents = true, 這是什么意思呢?表示當(dāng)前的路徑正式開始被監(jiān)控,一旦監(jiān)控的路徑出現(xiàn)變更,F(xiàn)ileSystemWatcher 中的指定事件將會(huì)被觸發(fā)。
掃一下上面定義的各個(gè) event 事件,分別都定義了該事件的處理函數(shù),比如說(shuō):FileSystemWatcher_Created,F(xiàn)ileSystemWatcher_Renamed,FileSystemWatcher_Deleted ,顯而易見觸發(fā)某一個(gè)事件就會(huì)觸發(fā)它的事件處理函數(shù),對(duì)吧,具體代碼如下:
private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e) { Console.WriteLine("File created: {0}", e.Name); } private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e) { Console.WriteLine("File renamed: {0}", e.Name); } private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e) { Console.WriteLine("File deleted: {0}", e.Name); }
下面是完整的可供參考的代碼清單。
using System; using System.IO; namespace IDGFileSystemWatcher { class Program { static void Main(string[] args) { string path = @"D:\IDG"; MonitorDirectory(path); Console.ReadKey(); } private static void MonitorDirectory(string path) { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(); fileSystemWatcher.Path = path; fileSystemWatcher.Created += FileSystemWatcher_Created; fileSystemWatcher.Renamed += FileSystemWatcher_Renamed; fileSystemWatcher.Deleted += FileSystemWatcher_Deleted; fileSystemWatcher.EnableRaisingEvents = true; } private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e) { Console.WriteLine("File created: {0}", e.Name); } private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e) { Console.WriteLine("File renamed: {0}", e.Name); } private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e) { Console.WriteLine("File deleted: {0}", e.Name); } } }
假設(shè) IDG 文件夾是在 E 盤內(nèi),接下來(lái)把 Console 運(yùn)行起來(lái),然后在 IDG 文件夾內(nèi)創(chuàng)建一個(gè)新文件,不出意外的話,你會(huì)觀察到這個(gè)新建的文件名將會(huì)出現(xiàn)在 控制臺(tái) 上,說(shuō)明 FileSystemWatcher_Created 被成功觸發(fā),參考下圖:
譯文鏈接:https://www.infoworld.com/article/3185447/how-to-work-with-filesystemwatcher-in-c.html
到此這篇關(guān)于C#中FileSystemWatcher使用教程的文章就介紹到這了,更多相關(guān)C# FileSystemWatcher使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Unity讀取Excel文件轉(zhuǎn)換XML格式文件
這篇文章主要為大家詳細(xì)介紹了Unity讀取Excel文件轉(zhuǎn)換XML格式文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06C#中DataTable的創(chuàng)建與遍歷實(shí)現(xiàn)
這篇文章主要介紹了C#中DataTable的創(chuàng)建與遍歷實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02C#簡(jiǎn)單實(shí)現(xiàn)防止多個(gè)程序運(yùn)行的方法
這篇文章主要介紹了C#簡(jiǎn)單實(shí)現(xiàn)防止多個(gè)程序運(yùn)行的方法,涉及C#進(jìn)程操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-02-02WPF實(shí)現(xiàn)背景燈光隨鼠標(biāo)閃動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)背景燈光隨鼠標(biāo)閃動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08WPF實(shí)現(xiàn)頁(yè)面的切換的示例代碼
本文主要介紹了WPF實(shí)現(xiàn)頁(yè)面的切換的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01