C# 文件监控,任何文件夹或文件修改后,如何立即触发监控

.NET
597
0
0
2022-03-28
标签   C#

一、场景

有时候,我们需要监控文件夹的变化,然后做出一些业务处理,这里面,最典型的例子,估计前端攻城狮老熟的,就是各种打包了。

那么在C#后端,也会遇到要监控变化的情况,像网盘等。

二、C#中的文件监控

可以用钩子函数来处理,这种会处理得让你抓狂,一可能是太多消息事件,你头都大,二估计你不是C/C++的程序员,对win32函数本身就不熟,找资料都要你老费劲了。

那么C#中的文件监控还有什么办法呢?C#庞大的类库中,提供了FileSystemWatcher类,该类可以专门用于文件夹监控,下面是该类的api定义:

C# 文件监控,任何文件夹或文件修改后,如何立即触发监控

三、FileSystemWatcher的功能

FileSystemWatcher可以根据您设定的文件夹进行监控,动作覆盖创建、删除、改动、重命名等。另外还可以动态地定义需要监控的文件类型,比如您只想监控rar文件、txt文件,又或者您想同时监控多种文件都可以。

四、FileSystemWatcher常用属性

  1. Path:要监视的文件夹路径。这是文件夹(也叫目录)路径,不是具体的某一个文件的路径,无法对单个具体文件监控。
  2. Filter:筛选监控的文件类型,指该文件夹下的某种类型的文件,比如*.txt、*.rar、*.html文件。
  3. NotifyFilter:监视什么动作类型。本属性是位域,允许进行位运算的。比如可以监视修改、目录名、文件名更改、修改时间等。
  4. IncludeSubdirectories:是否监控子文件夹。即级联监控。
  5. EnableRaisingEvents:是否启动本组件。这个新手很容易出问题的地方,本属性等于是个开关。新手以为FileSystemWatcher创建一个新对象new一下,就可以使用了,不是的,new了对象之后,要记得把本属性设置为true,才是真正开始用。

五、FileSystemWatcher常用事件

  1. Created:当创建文件夹,或者创建文件时,触发
  2. Changed:更新文件夹或者文件时触发
  3. Renamed:重命名文件夹或者文件时触发
  4. Deleted:删除文件夹或者文件时触发

六、简单示例

C# 文件监控,任何文件夹或文件修改后,如何立即触发监控

上图是代码截图,源码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            FileSystemWatcher watcher = new FileSystemWatcher(@"E:\test\");
            watcher.IncludeSubdirectories = true;
            watcher.Deleted += Watcher_Deleted;
            watcher.Created += Watcher_Created;
            watcher.Renamed += Watcher_Renamed;
            watcher.EnableRaisingEvents = true;
        }

        private void Watcher_Renamed(object sender, RenamedEventArgs e)
        {
           
        }

        private static void Watcher_Deleted(object sender, FileSystemEventArgs e)
        {
            
        }

        private static void Watcher_Created(object sender, FileSystemEventArgs e)
        {

        }
    }
}

运行效果,当您在E:\test进行文件夹或者文件操作时,当进入事件。

祝您用餐愉快。