在開(kāi)發(fā)各種應(yīng)用程序時(shí),我們經(jīng)常需要對(duì)文件系統(tǒng)中的文件或文件夾進(jìn)行實(shí)時(shí)監(jiān)測(cè),以便在文件內(nèi)容改變、文件被創(chuàng)建或刪除時(shí)能夠及時(shí)做出反應(yīng)。在 C# 中,System.IO.FileSystemWatcher 類(lèi)為我們提供了這樣一個(gè)強(qiáng)大的功能。
一、引入 FileSystemWatcher 類(lèi)
首先,在項(xiàng)目中引入 System.IO 命名空間,這是使用 FileSystemWatcher 類(lèi)的前提:using System.IO;
二、創(chuàng)建并配置 FileSystemWatcher 實(shí)例
下面是一個(gè)簡(jiǎn)單的例子,展示了如何創(chuàng)建一個(gè) FileSystemWatcher 實(shí)例并設(shè)置其監(jiān)視的目錄、事件類(lèi)型以及事件處理函數(shù):
public class FileFolderMonitor
{
private FileSystemWatcher _fileWatcher;
public void StartMonitoring(string directoryPath)
{
// 創(chuàng)建 FileSystemWatcher 實(shí)例
_fileWatcher = new FileSystemWatcher();
// 設(shè)置要監(jiān)視的目錄路徑
_fileWatcher.Path = directoryPath;
// 設(shè)置要監(jiān)視的更改類(lèi)型(例如:修改、創(chuàng)建、刪除)
_fileWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
// 添加事件處理程序
_fileWatcher.Changed += OnChanged;
_fileWatcher.Created += OnChanged;
_fileWatcher.Deleted += OnChanged;
_fileWatcher.Renamed += OnRenamed;
// 開(kāi)啟事件監(jiān)聽(tīng)
_fileWatcher.EnableRaisingEvents = true;
Console.WriteLine($"已開(kāi)始監(jiān)視文件夾: {directoryPath}");
}
private void OnChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine($"文件或文件夾發(fā)生變更: {e.FullPath},事件類(lèi)型: {e.ChangeType}");
}
private void OnRenamed(object source, RenamedEventArgs e)
{
Console.WriteLine($"文件或文件夾被重命名: 舊路徑 {e.OldFullPath} -> 新路徑 {e.FullPath}");
}
public void StopMonitoring()
{
if (_fileWatcher != null)
{
// 停止引發(fā)事件
_fileWatcher.EnableRaisingEvents = false;
// 清理資源
_fileWatcher.Dispose();
_fileWatcher = null;
Console.WriteLine("已停止監(jiān)視文件夾");
}
}
}
三、使用與注意事項(xiàng)
-
在上述代碼中,我們通過(guò)調(diào)用 StartMonitoring 方法啟動(dòng)了對(duì)指定目錄的監(jiān)視,并且在文件或子目錄發(fā)生變化時(shí)觸發(fā)相應(yīng)的事件處理器。
-
NotifyFilter 屬性用來(lái)定義需要監(jiān)聽(tīng)的具體事件類(lèi)型,如最后寫(xiě)入時(shí)間、文件名和目錄名的變化等。
-
Changed、Created、Deleted 和 Renamed 四個(gè)事件分別對(duì)應(yīng)于文件或文件夾的內(nèi)容更改、新建、刪除和重命名操作。
-
注意事項(xiàng):
-
FileSystemWatcher 類(lèi)并不能保證事件的即時(shí)性或順序性,尤其是在大量并發(fā)文件操作的情況下,可能會(huì)合并或延遲觸發(fā)事件。
-
使用 FileSystemWatcher 時(shí)應(yīng)確保合理處理資源,特別是當(dāng)不再需要監(jiān)視時(shí),應(yīng)及時(shí)調(diào)用 Dispose 方法釋放資源。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-840339.html
-
總結(jié)來(lái)說(shuō),System.IO.FileSystemWatcher 是實(shí)現(xiàn)文件系統(tǒng)實(shí)時(shí)監(jiān)控的強(qiáng)大工具,只需簡(jiǎn)單配置和事件處理,就能讓我們的應(yīng)用程序具備靈敏響應(yīng)文件系統(tǒng)變化的能力。
四、課外探索,彈出文件選擇框文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-840339.html
public static string SelectFolder(string description = "請(qǐng)選擇一個(gè)文件夾:", Environment.SpecialFolder rootFolder = Environment.SpecialFolder.MyComputer)
{
using (FolderBrowserDialog folderDialog = new FolderBrowserDialog())
{
folderDialog.Description = description;
folderDialog.RootFolder = rootFolder;
if (folderDialog.ShowDialog() == DialogResult.OK)
{
return folderDialog.SelectedPath;
}
}
return string.Empty;
}
到了這里,關(guān)于C#實(shí)時(shí)監(jiān)測(cè)文件夾變化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!