C#實現(xiàn)Winform監(jiān)控文件夾變化以及監(jiān)控文件操作教程
一、前言
在開發(fā)應(yīng)用程序時,我們可能會因為場景的需要,要對文件系統(tǒng)中的文件或文件夾進(jìn)行實時監(jiān)測,以便在文件內(nèi)容改變、文件被創(chuàng)建、刪除或重命名時能夠及時做出反應(yīng)。
今天,我將為大家介紹完整的操作流程,讓你輕松實現(xiàn)監(jiān)控文件/文件夾變化的功能。
本教程是以Winform為例,但并不代表監(jiān)聽文件夾的功能只能Winform才能用,只要C#代碼能運(yùn)行的環(huán)境和開發(fā)方式,都能用。
二、FileSystemWatcher 類
在 C# 中,System.IO.FileSystemWatcher 類為我們提供了這樣一個強(qiáng)大的功能。
因此我們在項目中直接使用該類來實現(xiàn)功能即可,值得注意的是,該類在 System.IO 命名空間下,大家引用的時候可別引錯了。
三、FolderBrowserDialog 類
在 C# 中,System.Windows.Form.FolderBrowserDialog 類可給Winform程序提供選擇文件夾的功能,這里我們使用該類進(jìn)行選擇文件夾的操作。
當(dāng)然,如果你非要手動復(fù)制文件夾的路徑,也不是不可以。
四、具體操作
1.設(shè)置監(jiān)聽文件夾
我們新建一個窗體,將它命名為:MainWindow.cs,然后添加一個文本框控件和一個按鈕控件。
在按鈕的點擊事件里面寫上如下代碼:
FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Multiselect = false; dialog.ShowDialog(); if (dialog.SelectedPaths != null && dialog.SelectedPaths.Length > 0) { //賦值到文本框 this.txtPath.Text = dialog.SelectedPaths[0].Trim(); }
這樣文本框就會在每次選擇文件夾之后,被賦值一個文件夾的路徑。
2.訂閱變更事件
public partial class MainWindow : Form { private FileSystemWatcher? _fileWatcher; //這里的 directoryPath,就是上一步選擇的文件夾路徑 public void StartMonitoring(string directoryPath) { // 創(chuàng)建 FileSystemWatcher 實例 _fileWatcher = new FileSystemWatcher(); // 設(shè)置要監(jiān)視的目錄路徑 _fileWatcher.Path = directoryPath; // 設(shè)置要監(jiān)視的更改類型(例如:修改、創(chuàng)建、刪除) _fileWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; // 添加事件處理程序 _fileWatcher.Changed += OnChanged; _fileWatcher.Created += OnChanged; _fileWatcher.Deleted += OnChanged; _fileWatcher.Renamed += OnRenamed; // 開啟事件監(jiān)聽 _fileWatcher.EnableRaisingEvents = true; Console.WriteLine($"已開始監(jiān)視文件夾: {directoryPath}"); } private void OnChanged(object source, FileSystemEventArgs e) { Console.WriteLine($"文件或文件夾發(fā)生變更: {e.FullPath},事件類型: {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)視文件夾"); } } }
在上述代碼中,我們通過調(diào)用 StartMonitoring
方法啟動了對指定目錄的監(jiān)視,并且在文件或子目錄發(fā)生變化時觸發(fā)相應(yīng)的事件處理器。
NotifyFilter
屬性用來定義需要監(jiān)聽的具體事件類型,如最后寫入時間、文件名和目錄名的變化等。
Changed
、Created
、Deleted
和 Renamed
四個事件分別對應(yīng)于文件或文件夾的內(nèi)容更改、新建、刪除和重命名操作。
3.注意事項
FileSystemWatcher 類并不能保證事件的即時性或順序性,尤其是在大量并發(fā)文件操作的情況下,可能會合并或延遲觸發(fā)事件。
使用 FileSystemWatcher 時應(yīng)確保合理處理資源,特別是當(dāng)不再需要監(jiān)視時,應(yīng)及時調(diào)用 Dispose 方法釋放資源。
總的來說,System.IO.FileSystemWatcher 是實現(xiàn)文件系統(tǒng)實時監(jiān)控的強(qiáng)大工具,只需簡單配置和事件處理,就能讓我們的應(yīng)用程序具備靈敏響應(yīng)文件系統(tǒng)變化的能力。
到此這篇關(guān)于C#實現(xiàn)Winform監(jiān)控文件夾變化以及監(jiān)控文件操作教程的文章就介紹到這了,更多相關(guān)C# Winform監(jiān)控文件夾變化以及操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
unity自帶尋路(導(dǎo)航)系統(tǒng) Nav Mesh導(dǎo)航網(wǎng)格
這篇文章主要為大家詳細(xì)介紹了unity自帶尋路(導(dǎo)航)系統(tǒng),Nav Mesh導(dǎo)航網(wǎng)格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11C#使用IronPython調(diào)用Python的實現(xiàn)
本文主要介紹了C#使用IronPython調(diào)用Python的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02