首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

.NET 不用控件實現資料夾監控系統:FileSystemWatcher 核心應用與開機自啟完整實作

     編輯:關於C語言

專案需求:監控特定資料夾檔案變更、開機自動啟動、變更即時通知使用者。研究發現 .NET 內建 FileSystemWatcher 元件完美契合,且無需拖曳控制項至設計面,完全以代碼實例化即可。

核心實作:FileSystemWatcher 代碼實例化

public static FileSystemWatcher watcher = new FileSystemWatcher();

事件訂閱與處理

watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);

事件處理範例

private void OnChanged(object sender, FileSystemEventArgs e)
{
    // e.ChangeType: Changed/Created/Deleted
    // e.FullPath: 完整路徑
    // e.Name: 檔名
    LogChange($"檔案 {e.ChangeType}: {e.FullPath}");
    NotifyUser($"偵測到檔案 {e.ChangeType}: {e.Name}");
}

private void OnRenamed(object sender, RenamedEventArgs e)
{
    LogChange($"檔案重命名: {e.OldFullPath} -> {e.FullPath}");
    NotifyUser($"檔案重命名: {e.OldName} -> {e.Name}");
}

權限需求:FullTrust 屬性

資料夾監控涉及系統安全,需宣告權限避免被視為非法操作:

[PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]

開機自啟動:登錄表操作

private void AutoRun_CheckedChanged(object sender, EventArgs e)
{
    string appName = "資料夾監控.exe";
    string appPath = Application.ExecutablePath;
    RegistryKey runKey = Registry.LocalMachine.OpenSubKey(
        @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
    
    if (AutoRun.Checked) // 啟用開機自啟
    {
        try
        {
            runKey.SetValue(appName, appPath);
            runKey.Close();
        }
        catch (IOException) { return; }
    }
    else // 關閉開機自啟
    {
        string[] names = runKey.GetValueNames();
        foreach (string name in names)
        {
            if (name.Equals(appName))
            {
                runKey.DeleteValue(appName);
                runKey.Close();
                break;
            }
        }
    }
}

介面展示

啟動介面

啟動介面

監控運行狀態

監控運行狀態

系統匣最小化與通知提示

系統匣最小化與通知

紅框處為運行中的監控程式,支援類似 QQ 的彈出通知提醒。

關鍵技術總結

[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
技術點實作要點
FileSystemWatcher代碼實例化,非設計面拖曳;設定 Path、Filter、NotifyFilter、EnableRaisingEvents
事件處理Changed/Created/Deleted 共用處理器;Renamed 獨立處理
權限宣告
開機自啟HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 登錄表讀寫
系統匣駐留NotifyIcon 控制項,ContextMenuStrip 提供還原/退出選單
通知提醒NotifyIcon.ShowBalloonTip 或自訂視窗

進階應用建議

  • 過濾器優化:設定 Filter = "*.txt|*.doc|*.pdf" 降低事件噪音
  • 緩衝區大小:InternalBufferSize 調大防止事件丟失(預設 8KB)
  • 批次處理:短時間內大量變更時,建議併入佇列延遲處理
  • 服務化部署:改為 Windows Service 以 System 身分運行,無需使用者登入
原文連結:https://www.cnblogs.com/wukaibo/archive/2011/04/05/2006179.html
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved