當前位置: 妍妍網 > 碼農

C#中監控資料夾變動的利器:FileSystemWatcher類

2024-02-27碼農

在C#中,如果你想要監控一個資料夾內檔的變動情況,比如檔的建立、刪除、修改等,你可以使用 FileSystemWatcher 類。 FileSystemWatcher 類提供了簡單的方式來監視檔案系統的更改。它位於 System.IO 名稱空間中,並允許你指定要監視的目錄以及你感興趣的事件型別。

一、FileSystemWatcher類簡介

FileSystemWatcher 類提供了一個異步機制來監視檔案系統的更改。你可以透過它註冊事件處理器來響應檔或目錄的更改,如:

  • Created :當在指定目錄中建立新檔或目錄時發生。

  • Deleted :當在指定目錄中刪除檔或目錄時發生。

  • Changed :當在指定目錄中更改檔時發生。

  • Renamed :當在指定目錄中重新命名檔或目錄時發生。

  • 二、使用FileSystemWatcher類

    要使用 FileSystemWatcher 類,你需要:

    1. 建立一個 FileSystemWatcher 例項。

    2. 設定它的 Path 內容,指定要監視的目錄。

    3. (可選)設定其他內容,如 Filter NotifyFilter 等,來過濾和客製監控。

    4. 為感興趣的事件註冊事件處理器。

    5. 呼叫 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#中監控資料夾中的檔變動。透過合理地使用它,你可以實作自動備份、日誌記錄、即時同步等功能。在使用時,請確保處理好事件,並考慮到效能和資源使用的因素。