详细介绍参照:https://www.cnblogs.com/artech/p/net-core-file-provider-02.html
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Primitives; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Threading.Tasks; namespace DynamicRegister1 { public class FileMoniter { public event EventHandler<EventArgs> FileChanged;//创建代理 public FileMoniter() { IFileProvider fileProvider = new PhysicalFileProvider(@"D:\test"); ChangeToken.OnChange(() => fileProvider.Watch("test.txt"), () => { if (FileChanged != null) { FileChanged.Invoke("11", null); } Console.WriteLine($"{DateTime.Now}_"); }); // 注册2个代理,监听 FileChanged += Change; FileChanged += Change1; } public void Change(Object sender, EventArgs args) { Console.WriteLine($"{DateTime.Now}_"); } public void Change1(Object sender, EventArgs args) { Console.WriteLine($"{DateTime.Now}_"); } } }
监控FileProvider所在目录或者文件的变化,我们可以调用它的Watch方法,当时前提是对应的FileProvider提供了这样的监控功能。这个方法接受一个字符串类型的参数filter,我们可以利用这个参数指定一个表达式来筛选需要监控的目标目录或文件。就目前预定义的这几个FileProvider来说,只有PhysicalFileProvider提供针对文件的监控功能。对于PhysicalFileProvider来说,它会委托一个FileSystemWatcher对象来完成最终的文件监控任务。在指定删选表达式的时候,我们可以指定需要被监控的某个具体目录或者文件路径,也可以采用下表所示的通配符“*”。
Filter |
Description |
foobar/data.txt |
存储在目录foobar下的文件data.txt。 |
foobar/*.txt |
存储在目录foobar下的所有.txt文件。 |
foobar/*.* |
存储在目录foobar下的所有文件。 |
foobar//*.* |
存储在目录foobar的所有子目录下的所有文件。 |