随笔 - 3457, 文章 - 0, 评论 - 739, 阅读 - 1178万
  管理

了解如何在 C# 中使用 FileSystemWatcher

Posted on   lzhdim  阅读(7)  评论(0编辑  收藏  举报

引言

存储在磁盘中的文件,由于对其操作,文件会产生变化。如何监视文件系统的变化,如文件的创建、删除、修改和重命名等。.NET框架是否提供什么相关类库。本文了解C#如何使用FileSystemWatcher实现监控磁盘文件变化。

FileSystemWatcher

1、概述

FileSystemWatcher是一个位于System.IO中的类库,主要用于侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。如文件的创建、删除、修改和重命名等。

2、基本属性

  • EnableRaisingEvents

决定对象在收到改变通知时是否提交事件,true表示将提交改变事件;false表示不提交改变事件。

  • Filter

用于过滤掉某些类型的文件发生的变化。例如,如需监控txt文件的修改、新建、删除时提交通知,则设置该属性为 *.txt 。

  • Path

用于设置需要监控哪个文件目录。例如,如需监控C:\Temp目录,则设置该属性为 C:\Temp。

  • IncludeSubDirectories

决定是否应该监控子目录中发生的改变,true表示监控需包含子目录;false表示监控不需包含子目录。

3、基本事件

  • Changed

表示监控目录中的文件被修改时,触发此事件。由于文件保存时,它的其它属性也会发生改变,所以事件会被提交多次。

  • Created

表示当监控目录有新建文件时,触发此事件。

注:

常见的文件系统操作可能会引发多个事件。 例如,移动文件是一项复杂的操作,可以能会引发多个 OnChanged、OnDeleted和OnCreated 事件。 如果没有正确处理这种情况的代码,就可能出现异常。

  • Deleted

表示当监控目录有文件被删除时,触发此事件。

  • Renamed

表示当监控目录有文件的名称被修改时,触发此事件。

示例

用于监视 C:\Logs 目录下,关于 *.log 文件的变化的示例:

namespace Fountain.WinConsole.FileWatcherDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建一个 Mutex 以防止多个实例同时运行
            using (var mutex = new Mutex(true, "Fountain.WinConsole.FileWatcherDemo.exe", out bool createdNew))
            {
                if (!createdNew)
                {
                    Console.WriteLine($"应用程序已在运行中...");
                    return;
                }
                // 创建 FileSystemWatcher 监控
                var fileSystemWatcher = new FileSystemWatcher
                {
                    // 监视 log 文件变化
                    Filter = "*.log",
                    // 监视目录
                    Path =  @"C:\Logs",
                    // 是否包含子目录
                    IncludeSubdirectories = true,
                    // 通知时是否提交事件
                    EnableRaisingEvents = true
                };
                // 
                fileSystemWatcher.Changed += MonikerOnChange;
                // 
                fileSystemWatcher.Created += MonikerOnCreated;
                // 
                while (true)
                {
                    Thread.Sleep(1000);
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void MonikerOnChange(object sender, FileSystemEventArgs e)
        {
            // 处理文件更改事件
            Console.WriteLine($"发生变更的文件: {e.FullPath}");
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void MonikerOnCreated(object sender, FileSystemEventArgs e)
        {
            // 处理文件创建事件
            Console.WriteLine($"新创建的文件: {e.FullPath}");
        }
    }
}

小结

以上是FileSystemWatcher在C#中实现监控文件夹和文件的使用方法,希望对您有所收获,如有不到之处,请多多包涵。

相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2016-12-01 5、项目间的沟通协调 - PMO项目管理办公室
2016-12-01 4、项目的培训 - PMO项目管理办公室
2016-12-01 3、项目资源的提供 - PMO项目管理办公室
2016-12-01 2、项目标准的制定 - PMO项目管理办公室
2008-12-01 基于XML的数据库总体分析
2008-12-01 如何在网页中制作虚线表格
2008-12-01 ASP.NET如何防范SQL注入攻击
2025年2月27日 星期四 【蛇】戊寅月丁卯日 乙巳年 一月三十
您的IP:3.138.125.44,操作系统:未知操作系统,浏览器:未知浏览器
Copyright (C) 2000-2025 Lzhdim Software All Rights Reserved
点击右上角即可分享
微信分享提示