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讲堂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 自动创建目录

2019独角兽企业重金招聘Python工程师标准>>> /*** 创建目录* param type $path* param type $mode* return type */public function rmkdir($path, $mode 0777) {return is_dir($path) || ( $this->rmkdir(dirname($path), $mode) && $this->_mkdir(…

油管螺纹尺寸对照表_yt15硬质合金刀片尺寸|A320焊接刀头参数

硬质合金刀片牌号表示方法如下图:yw1硬质合金刀片a320钨钛钴类硬质合金主要成分是碳化钨、碳化钛(TiC)及钴。其牌号由“YT”(“硬、钛”两字汉语拼音字首)和碳化钛平均含量组成。例如,YT15,表示平均碳化钛(TiC)15%,其余为碳化钨和…

python实验原理_Python实验报告八

安徽工程大学Python程序设计 班级:物流192 姓名:唐家豪 学号:3190505234 成绩: 日期:2020/06/03 指导老师:修宇 【实验目的】 : 掌握读写文本文件或 CSV 文件,进而对数据进行处理的方…

.NET 6 使用 Obfuscar 进行代码混淆

本文来安利大家 Obfuscar 这个好用的基于 MIT 协议开源的混淆工具。这是一个非常老牌的混淆工具,从 2014 年就对外分发,如今已有累计 495.5K 的 nuget 下载量。而且此工具也在不断持续迭代更新,完全支持 dotnet 6 版本,对 WPF 和 …

springmvc 传对象报400_那么火的SpringMVC到底有什么过人之处呢

先简单聊聊SpringMVC如果你们玩知乎,很可能会看到我的身影。我经常会去知乎水回答。在知乎有很多初学者都会问的一个问题:「我学习SpringMVC需要什么样的基础」我一定会让他们先学Servlet,再学SpringMVC的。虽然说我们在现实开发中几乎不会写…

matlab cftool代码_Matlab工具箱之拟合算法

和插值算法相比,拟合算法的优势在于拟合曲线不需要经过所有样本点,所以能降低函数的复杂程度。我们可以通过观察散点图目测拟合函数的大致形式,然后用最小二乘法计算待估参数。这时候Matlab就能发挥作用了,因为它提供了非常强大的…

WPF效果第一百七十八篇ItemsControl旋转

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放、语音播放问题、玩…

结对开发Ⅴ——循环一维数组求和最大的子数组

一、设计思路 (1)数据的存储结构是链表,最后一个结点的next指向第一个元素的结点; (2)数据个数为n,则最多有n*(n(n-1)...1)种情况(包括重复); (3&…

微软 MVP 福利大赏

前言成为微软 MVP 后, 可以获得微软提供的诸多福利。那具体有哪些福利呢?让我们一起来看看。行政表彰信行政表彰信宣布你的 MVP 身份,并恭祝你对技术社区的贡献。同时,概述了 MVP 项目的影响和意义。可以设置为 PDF 下载,也可以选…

canoco5主成分分析步骤_R语言 PCA主成分分析

微信公众号:生信小知识关注可了解更多的教程及生信知识。问题或建议,请公众号留言;R语言 PCA主成分分析前言统计学背景知识协方差相关系数函数总结实例讲解1.载入原始数据2.作主成分分析3.结果解读4.画主成分的碎石图并预测5.PCA结果绘制后记前言PCA分析…

物理专线流量平滑切换

在从传统IDC向云上迁移过程中,物理专线作为连接云上和云下的桥梁,在混合云架构中占有绝对重要的地位。作为基础设施,在伴随业务不断发展的过程当中,也会进行相应的更换升级。本文将介绍在物理专线特定情况下进行流量切换时&#x…

怎么实现动态设置静态文件存储目录?

前言文章名字有点绕口,举例说明一下:多用户使用同一个网站上传文件,但是因为一些原因,文件需要存储到服务器的不同目录下。比如用户 A 对应 c:\abc,用户 B 对应 d:\xyz\123。并且,文件需要以静态文件方式提…

编写函数判断一个数是否是回文数_程序员面试金典 - 面试题 01.04. 回文排列

题目难度: 简单原题链接 题目描述给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。示例 1:输入:"tactcoa" 输出…

Facebook为Messenger应用添加群组付款功能

Facebook在2015年为Messenger应用添加了好友免费转账功能。这个使得用户可以方便安全地向朋友转账,但是如果用户需要向多人支付,可能会耗费时间。幸运的是,Facebook已经通过其最新的Messenger应用更新解决了这个缺点。扩展付款功能现在允许用…

Xamarin.Forms 5.0 项目实战发布!

活动介绍本次活动主要是 .NET Xamarin.Forms 移动端项目开发实战教程, 与以往相同, 本次的收入(其它部分会另行说明) 将用于社区公益活动, 不限于:公益性质的个人/组织机构捐赠开源社区个人/项目捐赠内部投票活动本次的活动费用为:399元, 相对于去年组织的WPF公益实战视频而言,…

unity webgl读写txt文件_VB 读写txt文件

No.7 读写txt文件​mp.weixin.qq.com许多程序需要读写数据,比如商品管理,图书管理,学生档案等,当需要查询的时候,就是读取数据,新增或者更改就需要写数据,VB来讲,中小型的数据一般用…

地图投影系列介绍(一)----地球空间模型

1、现实世界和坐标空间的联系 任何空间特征都表示为地球表面的一个特定位置,而位置依赖于既定的坐标系来表示。 通过统一的坐标系和高程系,可以使不同源的GIS数据叠加在一起显示,以及执行空间分析。 2、地球空间模型描述

layui 数字步进器_图解全新奔驰S级:从“传统豪华”向“数字豪华”转型

全新奔驰S级的全球首发,中国这次也同步进行亮相。而且在全球首发之前的6个小时,就邀请了中国媒体提早进行品鉴。讲真,虽然之前我也不看好新S级,尤其是此前不知道在哪里泄露出来的图片,看着这台车的气场远不及W222来得强…

C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

--概述这个项目演示了如何在WPF中使用各种Prism功能的示例。如果您刚刚开始使用Prism,建议您从第一个示例开始,按顺序从列表中开始。每个示例都基于前一个示例的概念。此项目平台框架:.NET Core 3.1Prism版本:8.0.0.1909提示&…

地图投影系列介绍(二)----地理坐标系

3、地理坐标系 地球的形状与大小确定之后,还必须确定椭球体与大地水准面的相对关系,这项工作称为椭球定位与定向。与大地水准面符合得最好的一个地球椭球体,称为参考椭球体,是地球形体三级逼近。 说到这里,我们需要对这几个词汇做区分: