C# 观察文件的更改

2c8982e9e250936c79c55d11b9e3fb03.png

使用 FileSystemWatcher 可以监视文件的更改。事件在创建、重命名、删除和更改文件时触发。这可用于如下场景:需要对文件的变更做出反应,例如,服务器上传文件时,或文件缓存在内存中,而缓存需要在文件更改时失效。

8181e9df9105efe3a972eec800b24558.png

因为 FileSystemWatcher 易于使用,所以下面直接开始一个示例。FileMonitor的示例代码利用以下名称空间: 

System 
System.IO

f5217d106c7e2c2620472805fb16275d.png

示例代码在 WatchFiles() 方法中开始观察文件。使用 FileSystemWatcher 的构造函数时,可以提供应该观察目录。还可以提供一个过滤器,只过滤出与过滤表达式匹配的特定文件。当设置属性 IncludeSubdirectories 时,可以定义是否应该只观察指定目录中的文件,或者是否还应该观察子目录中的文件。对于Created、Changed、 Deleted 和 Renamed 事件,提供事件处理程序。所有这些事件的类型都是 FileSystemEventHandler,只有 Renamed事件的类型是RenamedEventHandler。RenamedEventHandler 派生自 FileSystemEventHandler,提供了事件的附加信息:

private static FileSystemWatcher s_watcher;


public static void WatchFiles(string path, string filter) 
{ 
  s_watcher = new FileSystemWatcher(path, filter)
  {
    IncludeSubdirectories = true
  };
  s_watcher.Created += OnFileChanged; 
  s_watcher.Changed += OnFileChanged; 
  s_watcher.Deleted += OnFileChanged; 
  s_watcher.Renamed += OnFileRenamed; 
  s_watcher.EnableRaisingEvents = true;
  Console.WriteLine("watching file changes...");
}

2f49142cf4d73876cf5d54db3b9779e9.png

因文件变更而接收到的信息是 FileSystemEventArgs 类型。它包含了变更文件的名字,这种变更是一个 WatcherChangeTypes 类型的枚举:

private static void OnFileChanged(object sender, FileSystemEventArgs e)
{
  Console.WriteLine($"file {e.Name} {e.ChangeType}");
}

b21f6b12fcbe917514ac4f383e906839.png

重命名文件时,通过 RenamedEventArgs 参数收到其他信息。这个类型派生自FileSystemEventArgs,它定义了文件原始名称的额外信息:

private static void OnFileRenamed(object sender, RenamedEventArgs e) 
{
  Console.WriteLine($"file {e.OldName} {e.ChangeType} to {e.Name}");
}

06a962073e3dc6fae72191022dcb212c.png

指定要观察的文件夹和 *.txt 作为过滤器,启动应用程序,创建文件 samplel.txt,添加内容,把它重命名为 sample2.txt,最后删除它,输出如下。

watching file changes...
file New Text Document.txt Created
file New Text Document.txt Renamed to samplel.txt 
file samplel.txt Changed 
file samplel.txt Changed
file samplel.txt Renamed to sample2.txt 
file sample2.txt Deleted

6a25c40a28ec29c29c1be41dc988ee5f.png

8c1ef2bc6943cc636e74c72295471bef.png

 微信公众号 

Dotnet讲堂

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值