C#中FileSystemWatcher的使用教程

开局一张图,在 System.IO 下的 FileSystemWatcher 常用于监视文件系统的变更,当文件系统中的文件或者文件夹被修改会自动触发相应的回调事件。

为了能够了解 FileSystemWatcher 是怎么运作的,你可以指定一个被监视的文件夹,当被监视的文件夹修改后,大概会触发如下的一些事件。

  • Changed: 当文件或者文件夹已经完成修改时触发此事件
  • Created:当文件或者文件夹已经成功创建触发此事件
  • Deleted:当文件或者文件夹已经成功删除触发此事件
  • Error:当变更的过程中发生错误触发此事件。
  • Renamed:当文件或者文件夹已经成功被重命名时触发此事件

创建一个简单的 file 监视

接下来我们在 Visual Studio 中创建一个 Console 程序,用来了解如何进行文件监视,不过建议把 Console 部署成 Windows Service,这样方便在系统中常驻监控,一旦被监视的路径发生变更就会自动发出通知事件。

该说的都说了,接下来一起研究代码吧。

    static void Main(string[] args)
    {
      string path = @"D:\IDG";

      MonitorDirectory(path);

      Console.ReadKey();
    }

下面的代码片段展示了 MonitorDirectory 方法的内部逻辑,这个方法可用于监视指定的文件夹并且当文件夹变更时触发事件,可以看到文件夹路径是通过参数传进去的。

    private static void MonitorDirectory(string path)
    {
      FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

      fileSystemWatcher.Path = path;

      fileSystemWatcher.Created += FileSystemWatcher_Created;
      fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;

      fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;

      fileSystemWatcher.EnableRaisingEvents = true;
    }

可以着重了解一下上面的 event 是如何被灌入的,而且我还写了一句 fileSystemWatcher.EnableRaisingEvents = true, 这是什么意思呢?表示当前的路径正式开始被监控,一旦监控的路径出现变更,FileSystemWatcher 中的指定事件将会被触发。

扫一下上面定义的各个 event 事件,分别都定义了该事件的处理函数,比如说:FileSystemWatcher_Created,FileSystemWatcher_Renamed,FileSystemWatcher_Deleted ,显而易见触发某一个事件就会触发它的事件处理函数,对吧,具体代码如下:

    private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
    {
      Console.WriteLine("File created: {0}", e.Name);
    }

    private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)
    {
      Console.WriteLine("File renamed: {0}", e.Name);
    }

    private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)
    {
      Console.WriteLine("File deleted: {0}", e.Name);
    }

下面是完整的可供参考的代码清单。

using System;

using System.IO;

namespace IDGFileSystemWatcher
{
  class Program
  {
    static void Main(string[] args)
    {
      string path = @"D:\IDG";
      MonitorDirectory(path);
      Console.ReadKey();
    }
    private static void MonitorDirectory(string path)
    {
      FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
      fileSystemWatcher.Path = path;
      fileSystemWatcher.Created += FileSystemWatcher_Created;
      fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;
      fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;
      fileSystemWatcher.EnableRaisingEvents = true;
    }

    private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
    {
      Console.WriteLine("File created: {0}", e.Name);
    }

    private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)
    {
      Console.WriteLine("File renamed: {0}", e.Name);
    }

    private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)
    {
      Console.WriteLine("File deleted: {0}", e.Name);
    }
  }
}

假设 IDG 文件夹是在 E 盘内,接下来把 Console 运行起来,然后在 IDG 文件夹内创建一个新文件,不出意外的话,你会观察到这个新建的文件名将会出现在 控制台 上,说明 FileSystemWatcher_Created 被成功触发,参考下图:

译文链接:https://www.infoworld.com/article/3185447/how-to-work-with-filesystemwatcher-in-c.html

到此这篇关于C#中FileSystemWatcher使用教程的文章就介绍到这了,更多相关C# FileSystemWatcher使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • c#使用filesystemwatcher监视文件系统的变化

    复制代码 代码如下: #region 监视文件夹的变化            FileSystemWatcher watcher = new FileSystemWatcher();            watcher.Path = "f:\\";            watcher.NotifyFilter =//被监控的方面               NotifyFilters.LastWrite |               NotifyFilters.FileName

  • c#使用filesystemwatcher实时监控文件目录的添加和删除

    首先,我们需要对.net提供的FileSystemWatcher类有所了解.我有些懒,找了MSDN对该类的描述. FileSystemWatcher类侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件. 使用 FileSystemWatcher 监视指定目录中的更改.可监视指定目录中的文件或子目录的更改.可以创建一个组件来监视本地计算机.网络驱动器或远程计算机上的文件. 若要监视所有文件中的更改,请将 Filter 属性设置为空字符串 ("") 或使用通配符("*

  • c#实现数据同步的方法(使用文件监控对象filesystemwatcher)

    最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给WEB服务器做别的操作,而那个文本的写入有时候会频繁,1秒可能多次,但是也有可能在相当长一段时间内是没有任何写入的. 这样一来如果每秒都去访问文件的话,一个是IO问题,还有就是每次操作都会引起后端一系列程序的反应,文本在长时间内无写入的话,一秒一次的触发一系列徒劳的事情太不可取了. 最终发现了c#中的File

  • C#使用FileSystemWatcher控件实现的文件监控功能示例

    本文实例讲述了C#使用FileSystemWatcher控件实现的文件监控功能.分享给大家供大家参考,具体如下: FileSystemWatcher 可以使用FileSystemWatcher组件监视文件系统,并对文件系统的改变作出反应.通过使用FileSystemWatcher组件,在特定的文件或目录被创建.修改或删除时,可以快速和便捷地启动业务流程. 例如,如果一组用户在合作处理一个存储在服务器共享目录下的文档时,可以使用FileSystemWatcher组件编写应用程序来监视对共享目录的更

  • C# FileSystemWatcher 在监控文件夹和文件时的使用方法

    概述 最近学习FileSystemWatcher的用法,它主要是监控一个文件夹,当文件夹内的文件要是有更改就要记录下来,我就整理下我对FileSystemWatcher 的理解和用法. FileSystemWatcher 用法 在应用FileSystemWatcher对象之前,你必须了解这个对象的一些基本属性和事件.毫无疑问,这个对象的最重要的属性为"EnableRaisingEvents"属性. 这个属性决定对象在收到改变通知时是否提交事件.如果EnableRaisingEvents

  • C#中FileSystemWatcher的使用教程

    开局一张图,在 System.IO 下的 FileSystemWatcher 常用于监视文件系统的变更,当文件系统中的文件或者文件夹被修改会自动触发相应的回调事件. 为了能够了解 FileSystemWatcher 是怎么运作的,你可以指定一个被监视的文件夹,当被监视的文件夹修改后,大概会触发如下的一些事件. Changed: 当文件或者文件夹已经完成修改时触发此事件 Created:当文件或者文件夹已经成功创建触发此事件 Deleted:当文件或者文件夹已经成功删除触发此事件 Error:当变

  • ng2学习笔记之bootstrap中的component使用教程

     前序: 现在angular2已经除了集成的angular-cli,建议大家可以基于这个来快速开发ng2的项目,不用自己再搭建环境: 相关内容请前往:https://angular.cn/docs/ts/latest/cli-quickstart.html 正文: 以图片轮播组件carousel为例: 首先安装好ng2-bootstrap,bootstrap npm install ng2-bootstrap bootstrap --save 在需要用到的模块中导入 import { Carou

  • 正则表达式简介及在C++11中的简单使用教程

    正则表达式Regex(regular expression)是一种强大的描述字符序列的工具.在许多语言中都存在着正则表达式,C++11中也将正则表达式纳入了新标准的一部分,不仅如此,它还支持了6种不同的正则表达式的语法,分别是:ECMASCRIPT.basic.extended.awk.grep和egrep.其中ECMASCRIPT是默认的语法,具体使用哪种语法我们可以在构造正则表达式的时候指定. 正则表达式是一种文本模式.正则表达式是强大.便捷.高效的文本处理工具.正则表达式本身,加上如同一门

  • Vrtualbox虚拟机中共享文件夹配置教程

    虚拟机装的是ubuntu 16.0.4版本的linux,本机是macOs 10.12.1版本 Vrtualbox进行如下配置 在Vrtualbox-->设置-->共享文件夹-->添加共享文件夹 指定你要共享的文件夹路径,这个路径指的是本机的路径,填写共享文件夹名称,这个名称可以随便取,这里取的是share,这里不要勾选自动挂载,什么都不要勾选,如果虚拟机装的是windows系统那么这里就勾选自动挂载. 进去虚拟机启动ubuntu系统,载ubuntu系统中新建文件夹路径随意 /etc/sh

  • Java8中的 Lambda表达式教程

     1. 什么是λ表达式 λ表达式本质上是一个匿名方法.让我们来看下面这个例子: public int add(int x, int y) { return x + y; } 转成λ表达式后是这个样子: (int x, int y) -> x + y; 参数类型也可以省略,Java编译器会根据上下文推断出来: (x, y) -> x + y; //返回两数之和 或者 (x, y) -> { return x + y; } //显式指明返回值 可见λ表达式有三部分组成:参数列表,箭头(-&g

  • python中numpy包使用教程之数组和相关操作详解

    前言 大家应该都有所了解,下面就简单介绍下Numpy,NumPy(Numerical Python)是一个用于科学计算第三方的Python包. NumPy提供了许多高级的数值编程工具,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而产生.下面本文将详细介绍关于python中numpy包使用教程之数组和相关操作的相关内容,下面话不多说,来一起看看详细的介绍: 一.数组简介 Numpy中,最重要的数据结构是:多维数组类型(numpy.ndarray) ndarray由两部分组成

  • CentOS7.3中Docker的安装教程

    一.简介 Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低. 本教程适合阅读人员:运维工程师.后端开发人员,通过本教程可以一步一步了解Docker的使用. 二.Docker的应用场景 1. Web 应用的自动化

  • 在Intellij IDEA中使用Debug(图文教程)

    Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化.通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码. 所以学习下如何在Intellij IDEA中使用好Debug,主要包括如下内容: 一.Debug开篇 二.基本用法&快捷键 三.变量查看 四.计算表达式 五.智能步入 六.断点条件设置 七.多线程调试 八.回退断点 九.中断Debug 十.附:JRebel激活 一.Debug开篇 首先

  • C#中backgroundworker的使用教程

    介绍: 根据MSDN介绍: BackgroundWorker 类允许您在单独的专用线程上运行操作. 耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态. 如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题. 若要在后台执行耗时的操作,请创建一个 BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件. 可以通过编程方式创建 Background

  • Linux中selinux基础配置教程详解

    selinux(Security-Enhanced Linux)安全增强型linux,是一个Linux内核模块,也是Linux的一个安全子系统. 三种模式: Enforcing:强制模式,在selinux运作时,已经开始限制domain/type. permissive: 警告模式,在selinux运作时,会有警告讯息,但不会限制domain/type的存取. disabled: 关闭模式. 可用getenforce查看selinux状态 selinux对文件的作用: 当开启selinux后,s

随机推荐