在C#中,如果你想要監控一個資料夾內檔的變動情況,比如檔的建立、刪除、修改等,你可以使用
FileSystemWatcher
類。
FileSystemWatcher
類提供了簡單的方式來監視檔案系統的更改。它位於
System.IO
名稱空間中,並允許你指定要監視的目錄以及你感興趣的事件型別。
一、FileSystemWatcher類簡介
FileSystemWatcher
類提供了一個異步機制來監視檔案系統的更改。你可以透過它註冊事件處理器來響應檔或目錄的更改,如:
Created
:當在指定目錄中建立新檔或目錄時發生。
Deleted
:當在指定目錄中刪除檔或目錄時發生。
Changed
:當在指定目錄中更改檔時發生。
Renamed
:當在指定目錄中重新命名檔或目錄時發生。
二、使用FileSystemWatcher類
要使用
FileSystemWatcher
類,你需要:
建立一個
FileSystemWatcher
例項。設定它的
Path
內容,指定要監視的目錄。(可選)設定其他內容,如
Filter
、NotifyFilter
等,來過濾和客製監控。為感興趣的事件註冊事件處理器。
呼叫
EnableRaisingEvents
方法開始監視。
三、範例程式碼
下面是一個簡單的範例,展示了如何使用
FileSystemWatcher
類來監控一個資料夾中檔的變動情況:
using System;
using System.IO;
classProgram
{
staticvoidMain()
{
// 建立FileSystemWatcher例項
FileSystemWatcher watcher = new FileSystemWatcher();
// 設定要監視的目錄
watcher.Path = @"C:\YourFolderToWatch";
// 過濾條件,例如只監控.txt檔
watcher.Filter = "*.txt";
// 通知過濾器,設定需要監控的事件型別
watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
// 註冊事件處理器
watcher.Created += OnFileCreated;
watcher.Deleted += OnFileDeleted;
watcher.Changed += OnFileChanged;
watcher.Renamed += OnFileRenamed;
// 開始監控
watcher.EnableRaisingEvents = true;
// 保持控制台開啟,以便接收事件
Console.WriteLine("Press 'Enter' to quit the sample.");
Console.ReadLine();
// 停止監控
watcher.EnableRaisingEvents = false;
}
// 當檔被建立時觸發
privatestaticvoidOnFileCreated(object source, FileSystemEventArgs e)
{
Console.WriteLine($"File: {e.FullPath} has been created.");
}
// 當檔被刪除時觸發
privatestaticvoidOnFileDeleted(object source, FileSystemEventArgs e)
{
Console.WriteLine($"File: {e.FullPath} has been deleted.");
}
// 當檔被修改時觸發
privatestaticvoidOnFileChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine($"File: {e.FullPath} has been changed.");
}
// 當檔被重新命名時觸發
privatestaticvoidOnFileRenamed(object source, RenamedEventArgs e)
{
Console.WriteLine($"File: {e.OldFullPath} has been renamed to {e.FullPath}.");
}
}
在這個例子中,
FileSystemWatcher
例項被設定為監視
C:\YourFolderToWatch
目錄下所有
.txt
檔的建立、刪除、修改和重新命名事件。每當這些事件發生時,相應的事件處理器就會被呼叫,並在控制台輸出相應的訊息。
四、註意事項
確保你的應用程式有許可權存取和監控指定的資料夾。
FileSystemWatcher
可能不會捕獲所有檔案系統事件,特別是在高負載或高並行的情況下。
為了減少資源使用,可以在事件處理完成後使用
Stop()
方法來停止
FileSystemWatcher
,並在需要時重新啟動它。
如果你的應用程式需要處理大量檔或目錄事件,可能需要考慮使用其他機制,如Windows API呼叫,或者使用第三方庫來增強效能。
五、總結
FileSystemWatcher
類是一個強大且易用的工具,用於在C#中監控資料夾中的檔變動。透過合理地使用它,你可以實作自動備份、日誌記錄、即時同步等功能。在使用時,請確保處理好事件,並考慮到效能和資源使用的因素。