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,一经查实,立即删除!

相关文章

html5储存类型,html5本地存储-留言板

HTML5每日一练之JS API-本地存储LocalStorage 留言板 | 前端开发网(W3Cfuns.com)!var Storage {saveData:function()//保存数据{var data document.querySelector("#post textarea");if(data.value ! ""){var time new Date().getTime() Mat…

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 文件,进而对数据进行处理的方…

关于android MTK相机L版本,切换屏幕比例后,分辨率随之改变,但重新进入相机后原有分辨率不再生效问题...

BUG详细:比如4:3的时候是200W,切成全屏变400W,重新切回4:3为300W,退出相机后,重新进入又变成200W。 原因分析:这个版本的设计如此,当你点选屏幕比例的时候,程序设计是把这个比例值作…

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

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

html的canvas标签用法,html5中关于canvas标签用法(绘图)

标签只是图形容器,您必须使用脚本来绘制图形。用canvas配合javascript可以直接在html页面动态绘图,无需调用jquery。代码如下:var my_canvasdocument.getelementbyid("canvas"); //获取canvas的idvar contextmy_canvas.getcontext(…

C#生成二维码(含解码)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;using System.Collections; using com.google.zxing;//需要从网上下载 using S…

Android之在TextView里面部分文字变颜色并且可以点击

1、问题 在TextView里面部分文字变颜色并且可以点击 2、借助SpannableString SpannableString和String一样,是一种字符串类型 public void setSpan(Object what, int start, int end, int flags) {super.setSpan(what, start, end, flags);} what表示设置格式是,可以是可点…

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

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

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

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

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

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

计算机安全专家建议:尽快为电脑升级打补丁

新型“蠕虫”式勒索病毒爆发,国家网络与信息安全中心紧急通报 5月13日下午,国家网络与信息安全信息通报中心紧急通报:12日20时左右,新型“蠕虫”式勒索病毒爆发,目前已有100多个国家和地区的数万台电脑遭该勒索病毒感染…

大型网站技术架构02 网站的高性能架构、网站的可用性架构

大型网站核心架构要素 1. 性能 2. 可用性 3. 伸缩性 4. 扩展性 5. 安全性 瞬时响应:网站的高性能架构 1. 网站性能测试: 1). 不同视角下的网站性能 a. 用户视角的网站性能:用户计算机,网站服务器通信时间,网站服务器处…

DateTime.Now.Ticks.ToString()说明

一个以0.1纳秒为单位的时间戳,就是一个long型的数,其实DateTime本质上就是一个long型的,通过0.1纳秒的单位,换算成各种时间,如果分,秒,年月日等等这些组合起来就是一个DateTime类型了 举例&…

linux之 !!命令

1、问题 在linux终端,我们知道快速用上一个命令,我们可以是用”上“键,但是这个键是键盘的右边的键,那还有其建有这个效果吗? 2、解决 我们可以使用下面的命令 !! 是刚一个毕业的应届生跑到…

sq工程师是做什么的_算法工程师为什么成天做数据,都做哪些数据?

大家好,前几天群里有小伙伴说希望看到更多的算法工程师的日常。其实对于算法工程师而言,最大的日常就是做数据了,所以给大家分享一下做数据的那些事。为什么很少做模型在大家想象当中,可能算法工程师做的事情是今天看paper&#x…

编写html要注意,编写XHTML需要注意的问题以及和HTML的区别

文档必须是编排良好的元素必须嵌套,尽管SGML规定层叠非法,但现有的浏览器普遍允许层叠。正确:嵌套元素。here is an emphasized paragraph.不正确:层叠元素。here is an emphasized paragraph.嵌套与层叠元素和属性名必须小写对所…

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

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

微软 MVP 福利大赏

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