首页 > 编程语言 >C#实时监测文件夹变化

C#实时监测文件夹变化

时间:2024-03-15 17:33:21浏览次数:23  
标签:folderDialog 文件 FileSystemWatcher C# 实时 文件夹 事件 fileWatcher

在开发各种应用程序时,我们经常需要对文件系统中的文件或文件夹进行实时监测,以便在文件内容改变、文件被创建或删除时能够及时做出反应。在 C# 中,System.IO.FileSystemWatcher 类为我们提供了这样一个强大的功能。

一、引入 FileSystemWatcher 类
首先,在项目中引入 System.IO 命名空间,这是使用 FileSystemWatcher 类的前提:
using System.IO;
二、创建并配置 FileSystemWatcher 实例
下面是一个简单的例子,展示了如何创建一个 FileSystemWatcher 实例并设置其监视的目录、事件类型以及事件处理函数:

public class FileFolderMonitor
{
    private FileSystemWatcher _fileWatcher;

    public void StartMonitoring(string directoryPath)
    {
        // 创建 FileSystemWatcher 实例
        _fileWatcher = new FileSystemWatcher();

        // 设置要监视的目录路径
        _fileWatcher.Path = directoryPath;

        // 设置要监视的更改类型(例如:修改、创建、删除)
        _fileWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;

        // 添加事件处理程序
        _fileWatcher.Changed += OnChanged;
        _fileWatcher.Created += OnChanged;
        _fileWatcher.Deleted += OnChanged;
        _fileWatcher.Renamed += OnRenamed;

        // 开启事件监听
        _fileWatcher.EnableRaisingEvents = true;

        Console.WriteLine($"已开始监视文件夹: {directoryPath}");
    }

    private void OnChanged(object source, FileSystemEventArgs e)
    {
        Console.WriteLine($"文件或文件夹发生变更: {e.FullPath},事件类型: {e.ChangeType}");
    }

    private void OnRenamed(object source, RenamedEventArgs e)
    {
        Console.WriteLine($"文件或文件夹被重命名: 旧路径 {e.OldFullPath} -> 新路径 {e.FullPath}");
    }

    public void StopMonitoring()
    {
        if (_fileWatcher != null)
        {
            // 停止引发事件
            _fileWatcher.EnableRaisingEvents = false;

            // 清理资源
            _fileWatcher.Dispose();
            _fileWatcher = null;

            Console.WriteLine("已停止监视文件夹");
        }
    }
}

三、使用与注意事项

  • 在上述代码中,我们通过调用 StartMonitoring 方法启动了对指定目录的监视,并且在文件或子目录发生变化时触发相应的事件处理器。

  • NotifyFilter 属性用来定义需要监听的具体事件类型,如最后写入时间、文件名和目录名的变化等。

  • Changed、Created、Deleted 和 Renamed 四个事件分别对应于文件或文件夹的内容更改、新建、删除和重命名操作。

  • 注意事项:

  • FileSystemWatcher 类并不能保证事件的即时性或顺序性,尤其是在大量并发文件操作的情况下,可能会合并或延迟触发事件。

  • 使用 FileSystemWatcher 时应确保合理处理资源,特别是当不再需要监视时,应及时调用 Dispose 方法释放资源。

  • 总结来说,System.IO.FileSystemWatcher 是实现文件系统实时监控的强大工具,只需简单配置和事件处理,就能让我们的应用程序具备灵敏响应文件系统变化的能力。
    四、课外探索,弹出文件选择框

public static string SelectFolder(string description = "请选择一个文件夹:", 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;
    }

标签:folderDialog,文件,FileSystemWatcher,C#,实时,文件夹,事件,fileWatcher
From: https://www.cnblogs.com/Z1000W/p/18075896

相关文章

  • 【spring】@PropertySource 注解学习
    @PropertySource介绍@PropertySource是Spring框架中的一个注解,主要用于Java配置类中,用于引入额外的属性文件,以便在Spring应用上下文中使用这些属性。在Spring3.1引入Java配置后,我们可以通过@Configuration注解的类和@Bean注解的方法来进行组件扫描和依赖注入配置。但是,对于......
  • YUNBEE云贝-PGCM v16大师认证实战培训课云贝专属奖学金,等你来拿!
    课程安排5天30课时,理论+实验相结合,贴近生产实战授课课程学习内容课时第一章介绍1.1PGCM课程介绍第1天/6课时第二章认证安全2.1认证安全(信任认证和口令认证)2.2密码复杂度2.3访问控制(数据库角色、ACL/权限管理、行级安全性)2.4安全审计(审计日志)第三章内存管......
  • RC522刷卡电路设计及程序
    一、RC522刷卡电路组成基于RC522的刷卡电路如上图所示。该电路组成主要分为三部分:ReceivingCircuit:接收电路,接收卡发送的数据。FilteringImpedence-Transtormcircuit:滤波和阻抗变换电路,抑制高次谐波并优化到读卡器天线的功率传输。MatchingCircuit:天线匹配电路。......
  • ThreadLocal源码解析
    ThreadLocalpublicvoidset(Tvalue){Threadt=Thread.currentThread();ThreadLocalMapmap=getMap(t);if(map!=null)//map不为null,之前设置过情况map.set(this,value);elsecreateMap(t,value);}privatevoidset......
  • java上传文件到FTP制定文件夹
    JAVA上传文件到FTP/***@ClassNameFTPLoad*@DescriptionTODO*@Authordell*@Date2024/3/1415:56*@Version1.0**/importcn.hutool.core.io.FileUtil;importcn.hutool.json.JSONObject;importcn.hutool.json.JSONUtil;importorg.apache.commons.net.......
  • 从公司的code Review 中提升编码能力
    1、对于只有一个ifelse并且简单赋值可以用三元表达式优化修改之前:优化后:对于不变的并且结构很长的这种对象或数组,可以放到一个ts文件,通过引入的方式,这样代码看起来会代码更简洁明了2、用map映射替换重复判断的ifelse修改之前:优化后:对于重复的ifelse判断,可......
  • 实名制的重要性-身份证实名认证接口-C#接口代码
    身份证实名制在现代社会中已经成为一项重要的制度,被广泛应用。对于消费者而言,身份证实名验证可以保障个人信息的安全,防止个人信息被盗用;对于企业而言,身份证实名验证也可以保障企业的安全,防止诈骗份子对企业利益造成损害。翔云身份证实名认证接口,实时联网,可快速、精准核验......
  • AspNetCore8.0实战
    前言想变优秀的第N天。学习张老师的Blog.Core。1.创建Asp.NetCoreAPI1.1创建项目启用OpenAPI:sawgger不适用顶级语句:使用main函数使用控制器:controller1.2配置说明iisSettings:iis配置。http:kestrl启动配置。IISExpress:iis启动配置。2.仓储+服务创建以下公共类......
  • iOS端创建ReactNative容器第一步:打出jsbundle和资源包
    react-native的打包流程是通过执行react-nativebundle指令进行的。 添加构建指令修改RN项目中的package.json文件,先其中添加构建命令build-release-ios和build-debug-ios"scripts":{"android":"react-nativerun-android","ios":"react-nativerun-ios"......
  • linux硬件管理-dmidecode命令
    dmidecode命令主要用于获取主机的硬件信息,通常是在不打开计算机机箱的情况下使用该命令来查找硬件详细信息。其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等。常用用法[root@localhost~]$dmidecode#打印所有硬件信息[root@localhos......