一、场景
有时候,我们需要监控文件夹的变化,然后做出一些业务处理,这里面,最典型的例子,估计前端攻城狮老熟的,就是各种打包了。
那么在C#后端,也会遇到要监控变化的情况,像网盘等。
二、C#中的文件监控
可以用钩子函数来处理,这种会处理得让你抓狂,一可能是太多消息事件,你头都大,二估计你不是C/C++的程序员,对win32函数本身就不熟,找资料都要你老费劲了。
那么C#中的文件监控还有什么办法呢?C#庞大的类库中,提供了FileSystemWatcher类,该类可以专门用于文件夹监控,下面是该类的api定义:
三、FileSystemWatcher的功能
FileSystemWatcher可以根据您设定的文件夹进行监控,动作覆盖创建、删除、改动、重命名等。另外还可以动态地定义需要监控的文件类型,比如您只想监控rar文件、txt文件,又或者您想同时监控多种文件都可以。
四、FileSystemWatcher常用属性
- Path:要监视的文件夹路径。这是文件夹(也叫目录)路径,不是具体的某一个文件的路径,无法对单个具体文件监控。
- Filter:筛选监控的文件类型,指该文件夹下的某种类型的文件,比如*.txt、*.rar、*.html文件。
- NotifyFilter:监视什么动作类型。本属性是位域,允许进行位运算的。比如可以监视修改、目录名、文件名更改、修改时间等。
- IncludeSubdirectories:是否监控子文件夹。即级联监控。
- EnableRaisingEvents:是否启动本组件。这个新手很容易出问题的地方,本属性等于是个开关。新手以为FileSystemWatcher创建一个新对象new一下,就可以使用了,不是的,new了对象之后,要记得把本属性设置为true,才是真正开始用。
五、FileSystemWatcher常用事件
- Created:当创建文件夹,或者创建文件时,触发
- Changed:更新文件夹或者文件时触发
- Renamed:重命名文件夹或者文件时触发
- Deleted:删除文件夹或者文件时触发
六、简单示例
上图是代码截图,源码如下:
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进行文件夹或者文件操作时,当进入事件。
祝您用餐愉快。