使用文件监控对象FileSystemWatcher实现数据同步

使用文件监控对象FileSystemWatcher实现数据同步

原文 使用文件监控对象FileSystemWatcher实现数据同步

最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内 容。首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给WEB服务器做别的操作,而那 个文本的写入有时候会频繁,1秒可能多次,但是也有可能在相当长一段时间内是没有任何写入的。
这样一来如果每秒都去访问文件的话,一个是IO问题,还有就是每次操作都会引起后端一系列程序的反应,文本在长时间内无写入的话,一秒一次的触发一系列徒劳的事情太不可取了。
最终发现了c#中的FileSystemWatcher对象,在应用FileSystemWatcher之前,首先了解一下这个对象的基本属性和事件,首先普及一下FileSystemWatcher基本知识。
FileSystemWatcher基础
属性:
Path——这个属性告诉FileSystemWatcher它需要监控哪条路径。例如,如果我们将这个属性设为“C:\test”,对象就监控test目录下所有文件发生的所有改变(包括删除,修改,创建,重命名)。
IncludeSubDirectories——这个属性说明FileSystemWatcher对象是否应该监控子目录中(所有文件)发生的改变。
Filter——这个属性允许你过滤掉某些类型的文件发生的变化。例如,如果我们只希望在TXT文件被修改/新建/删除时提交通知,可以将这个属性设为“*txt”。在处理高流量或大型目录时,使用这个属性非常方便。
NotifyFilter——获取或设置要监视的更改类型。可以进一步的过滤要监控的更改类型,如watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
事件:
Changed——当被监控的目录中有一个文件被修改时,就提交这个事件。值得注意的是,这个事件可能会被提交多次,即使文件的内容仅仅发生一项改变。这是由于在保存文件时,文件的其它属性也发生了改变。
Created ——当被监控的目录新建一个文件时,就提交这个事件。如果你计划用这个事件移动新建的事件,你必须在事件处理器中写入一些错误处理代码,它能处理当前文件 被其它进程使用的情况。之所以要这样做,是因为Created事件可能在建立文件的进程释放文件之前就被提交。如果你没有准备正确处理这种情况的代码,就 可能出现异常。
Deleted——当被监控的目录中有一个文件被删除,就提交这个事件。
Renamed——当被监控的目录中有一个文件被重命名,就提交这个事件。
注:如果你没有将EnableRaisingEvents设为真,系统不会提交任何一个事件。如果有时FileSystemWatcher对象似乎无法工作,请首先检查EnableRaisingEvents,确保它被设为真。
事件处理 当 FileSystemWatcher调用一个事件处理器时,它包含两个自变量——一个叫做“sender”的对象和一个叫做“e”的 FileSystemEventArgs对象。我们感兴趣的自变量为FileSystemEventArgs自变量。这个对象中包含有提交事件的原因。以 下是FileSystemEventArgs对象的一些属性:
属性: Name——这个属性中使事件被提交的文件的名称。其中并不包含文件的路径——只包含使用事件被提交的文件或目录名称。
ChangeType——这是一个WatcherChangeTypes,它指出要提交哪个类型的事件。其有效值包括:
Changed
Created
Deleted
Renamed
FullPath——这个属性中包含使事件被提交的文件的完整路径,包括文件名和目录名。
注 意:FileSystemEventArgs对象是监控文件夹下有文件创建、删除、修改时的自变量,如果是重命名的话为RenamedEventArgs 对象此时除了FileSystemEventArgs对象的属性值,多了一个OldFullPath,为重命名之前的文件名。
以上为FileSystemEventArgs的基本知识,大部分是从网上搜找的然后自己稍微整理了一下。
下面为简单用法:

复制代码
 1         /// <summary>2         /// 使用文件监控对象FileSystemWatcher实现数据同步3       /// </summary>4         /// <param name="sender"></param>5         /// <param name="e"></param>6         private void Button_Click(object sender, RoutedEventArgs e)7         {8             FileSystemWatcher watcher = new FileSystemWatcher();9             watcher.Path = @"C:\test";
10             watcher.IncludeSubdirectories = true;
11             watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
12             //watcher.Filter = "*.txt";
13             watcher.Changed += (s, e1) => this.Dispatcher.Invoke(new Action(() =>
14             {
15                 lblMsg.Content = e1.Name + "被添加!";
16             }));
17 
18             watcher.Deleted += (s, e1) => this.Dispatcher.Invoke(new Action(() =>
19             {
20                 lblMsg.Content = e1.Name + "被删除!";
21             }));
22             watcher.Renamed += (s, e1) => this.Dispatcher.Invoke(new Action(() =>
23             {
24                 lblMsg.Content = e1.OldName + "被重命名为:" + e1.Name;
25             }));
26 
27             //开始监听
28             watcher.EnableRaisingEvents = true;
29         }        
复制代码

 

posted on 2013-12-13 21:00 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3473798.html

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

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

相关文章

吴恩达作业11:残差网络实现手势数字的识别(基于 keras)+tensorbord显示loss值和acc值

一&#xff0c;残差网络实现手写数字识别 数据集地址&#xff1a;https://download.csdn.net/download/fanzonghao/10551018 首先来resnets_utils.py,里面有手势数字的数据集载入函数和随机产生mini-batch的函数&#xff0c;代码如下&#xff1a; import os import numpy as…

通过SVD求解单应矩阵

我们现在知道原则上4对匹配点对就可以唯一确定单应矩阵&#xff0c;但是在实际应用中我们无法保证两个视图严格满足使用条件&#xff08;只有旋转变换&#xff1b;远景&#xff1b;平面场景&#xff09;&#xff0c;所以要使用拟合的方法求一个最优解。现在就来以SIFT算法源码为…

注意力机制(Attention)最新综述论文及相关源码

来源&#xff1a;专知注意力机制(Attention)起源于模仿人类的思维方式&#xff0c;后被广泛应用于机器翻译、情感分类、自动摘要、自动问答等、依存分析等机器学习应用中。专知编辑整理了Arxiv上一篇关于注意力机制在NLP中应用的综述《An Introductory Survey on Attention Mec…

橙子楼的猥琐大叔

故事要从暑假开始说起&#xff0c;那时我还在准备考研&#xff0c;每天往返于教室、宿舍和食堂&#xff0c;单调但不会无趣&#xff0c;常常会有故事发生&#xff0c;生活也很充实。 考研的一般都会在固定的教室有个自己的位子。 坐我正前面的是一个妹子&#xff0c;准确的说是…

Pycharm下安装Tensorflow

趁着帮师妹看Github上的一个项目&#xff0c;督促自己学习一下Python下训练神经网络的一整套流程。没想到在一开头就遇到了不少问题。首先是Pycharm中导入Github项目的问题&#xff0c;还有安装tensorflow的问题&#xff0c;之后又遇到了多种版本的Python共存的问题。在这里记录…

吴恩达作业9:卷积神经网络实现手势数字的识别(基于tensorflow)

数据集链接&#xff1a;https://download.csdn.net/download/fanzonghao/10551018 提供数据集代码放在cnn_utils.py里。 import math import numpy as np import h5py import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.python.framework import ops…

AI洞观 | 戴上红帽 看IBM冲杀云计算市场

来源 | 网易智能&#xff08;公众号 smartman163&#xff09;摘要&#xff1a;可以预计&#xff0c;未来的云计算市场将越来越比拼生态综合服务能力&#xff0c;云计算行业进入下半场&#xff0c;谁在裸泳不久见分晓。IBM豪掷340亿美元收购红帽&#xff08;Red Hat&#xff09;…

基于visual Studio2013解决面试题之0608找出两个只出现一次的数

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/*已知数组中有两个数只出现一次&#xff0c;其他成对出现&#xff0c;请找出这两个数解决办法&#xff1a;1&#xff09;简化问题&#xff0c;如果数组中只有一个数出现一次&#xff0c;那么只要对这个数组做异或即可2…

工业富联:左手工业AI,右手“雾小脑”

来源&#xff1a;先进制造业摘要&#xff1a;11月14日&#xff0c;第二十届中国国际高新技术成果交易会在深圳会展中心开幕。11月14日&#xff0c;第二十届中国国际高新技术成果交易会在深圳会展中心开幕。备受瞩目的是&#xff0c;在分论坛“2018第九届中国信息通信论坛”上&a…

吴恩达作业10:用卷积神经网络识别人脸happy(基于Keras)

数据集提供的代码放在kt_utils.py&#xff1a; import keras.backend as K import math import numpy as np import h5py import matplotlib.pyplot as pltdef mean_pred(y_true, y_pred):return K.mean(y_pred)def load_dataset():train_dataset h5py.File(datasets/train_h…

清华大学:智能驾驶背景下转向系统发展趋势

来源&#xff1a;智车科技这里近几年&#xff0c;自动驾驶汽车的研发与推广发展迅速&#xff0c;根据国家工业和信息化部等发布的《汽车产业中长期发展规划》&#xff0c;2025 年&#xff0c;高度和完全自动驾驶汽车开始进入市场&#xff0c;在此背景下&#xff0c;线控转向技术…

TensorFlow学习之——checkpoints

在看别人的训练网络中一开头就遇到这样一行代码&#xff1a; ckpt tf.train.get_checkpoint_state(directories.checkpoints) 鼠标放在函数名上&#xff0c;ctrlB&#xff0c;或者ctrl点击函数名&#xff0c;可以跳转到函数的定义&#xff0c;可以知道tf.train.get_checkpoi…

jQuery.ajax

(摘录)http://www.cnblogs.com/XuebinDing/archive/2012/03/01/2376041.html 情况一、使用WebService验证 1.新建demo.aspx页面。2.首先在该页面的后台文件demos.aspx.cs中添加引用。 using System.Web.Services; 3.无参数的方法调用. 大家注意了&#xff0c;这个版本不能低于.…

基于Keras的卷积神经网络用于猫狗分类(未进行数据增强)+卷积层可视化

首先看数据集路径&#xff1a; cats和dogs存放的就是各种大小的猫狗图片。 读取数据集代码&#xff1a; import os import matplotlib.pyplot as plt """ 读取数据 返回数据的文件夹名字&#xff0c;和具体的猫狗的路径 """ def read_data(): …

芯片植入:“增强人类”的生物黑科技

来源&#xff1a;资本实验室摘要&#xff1a;当医疗、电子、生物科技快速发展&#xff0c;并紧密融合的时候&#xff0c;许多科幻电影中的场景正在不断变为现实&#xff0c;而“增强人类”、”赛博格“、“电子人”、“生化人”正在成为这个时代最值得期待&#xff0c;又多少让…

如何通过VC的 CHttpFile 抓取网页内容

在点击一个按钮时开始请求你输入的地址。void CHttpFileDlg::OnButton1() {   CString url;   GetDlgItemText(IDC_EDIT1,url); // IDC_EDIT1 是一个输入框的名字。   char* headers"Accept:*/*\r\nAccept-Language:zh-cn\r\nUser-Agent:VCTestClient\r\n"; …

windows安装ubuntu16.04LTS 更换系统源为阿里源 安装ubuntu找不到windows 删除内核 更换pip源 升级pip源报错 ubuntu命令

一&#xff0c;安装ubuntu ubuntu镜像Index of /ubuntu-releases/18.04/ 首先在windows下硬盘划分出100G的空间&#xff0c;并且制作一个ubuntu的启动盘。在windows安装easy BCD用于开机启动ubuntu。下面看安装过程&#xff1a; 选择语言&#xff0c;我选择是英语 我选择的是…

基本系统部署完成!北斗三号闪耀中国智慧

▲ 第四十二、四十三颗北斗导航卫星乘长三乙火箭升空来源&#xff1a;航天501部2018年11月19日&#xff0c;第四十二、四十三颗北斗导航卫星在西昌卫星发射中心腾空而起。作为北斗三号第十八颗、第十九颗卫星&#xff0c;此次双星的成功发射&#xff0c;标志着北斗三号全球组网…

基于Keras的卷积神经网络用于猫狗分类(进行了数据增强)+卷积层可视化

接着我上一篇博客&#xff0c;https://blog.csdn.net/fanzonghao/article/details/81149153。 在上一篇基础上对数据集进行数据增强。函数如下&#xff1a; """ 查看图像增强是否发生作用 """ def see_pic_aug():train_datagen ImageDataGene…

深圳神经科学研究院院长谭力海: AI取代人脑? 不, 必须向人脑“学习”!

来源&#xff1a;读创科技摘要&#xff1a;从“深蓝”到“阿尔法狗”&#xff0c;人工智能技术日益成熟&#xff0c;“AI何时替代人脑”的争论也在不断升级。人工智能真的能超越人脑吗&#xff1f;11月15日在高交会“颠覆性创新技术”主题论坛上&#xff0c;深圳神经科学研究院…