.NET拾忆:FileSystemWatcher 文件监控
资源:
https://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher_properties(v=vs.110).aspx
FileSystemWatcher类
监控指定文件或目录的文件变化并触发相应事件。例如增删改、重命名、大小变化;可以按需要自定义需要监控的文件类型及文件属性改动的类型。
1.属性:
Path :设置要监视的目录的路径。
IncludeSubdirectories :设置是否级联监视指定路径中的子目录。true/false
Filter :设置筛选字符串,用于确定在目录中监视哪些类型的文件。如:"*.txt|*.doc|*.jpg"
NotifyFilter :设置文件的哪些属性的变动会触发Changed事件。(默认值为 NotifyFilter.LastWrite | NotifyFilter.FileName | NotifyFilter.DirectoryName)
Attributes -- 文件或文件夹的属性。
CreationTime -- 文件或文件夹的创建时间。
DirectoryName -- 目录名
FileName -- 文件名
LastAccess -- 文件或文件夹上一次打开的日期。
LastWrite -- 上一次向文件或文件夹写入内容的日期。
Security -- 文件或文件夹的安全设置。
Size -- 文件或文件夹的大小。
EnableRaisingEvents :设置是否开始监控。(默认为false)
2.常用事件:Changed :当更改文件和目录时发生,可以通过NotifyFilter属性设置触发该事件的需要文件更改的属性。
Created : 当创建文件和目录时发生。
Deleted : 删除文件或目录时发生。
Renamed :重命名文件或目录时发生。
3、事件类型:
1)FileSystemEventArgs 对象:
成员:Name: 获取受影响的文件或目录的名称。 注意:如果是级联监控子目录的话,该值为从监控目录的下个目录到受影响的文件的路径,而不只是受影响的文件名。
FullPath : 获取受影响的文件或目录的完全限定的路径。
ChangeType :获取受影响的文件或目录的发生的事件类型。
All -- 文件或文件夹的创建、删除、更改或重命名。
Changed -- 文件或文件夹的更改。更改的类型包括大小、属性、安全设置、最近写入时间和最近访问时间方面的更改。
Created -- 文件或文件夹的创建。
Deleted -- 文件或文件夹的删除。
Renamed -- 文件或文件夹的重命名。
2)RenamedEventArgs 对象:
成员:
Name: 获取受影响的文件或目录的新名称。
OldName : 获取受影响的文件或目录的旧名称。
FullPath : 获取受影响的文件或目录的完全限定的路径。
OldFullPath : 获取受影响的文件或目录的前一个完全限定的路径。
ChangeType :获取受影响的文件或目录的发生的事件类型。
All -- 文件或文件夹的创建、删除、更改或重命名。
Changed -- 文件或文件夹的更改。更改的类型包括大小、属性、安全设置、最近写入时间和最近访问时间方面的更改。
Created -- 文件或文件夹的创建。
Deleted -- 文件或文件夹的删除。
Renamed -- 文件或文件夹的重命名。
using System;
using System.IO;
using System.Runtime.InteropServices; namespace WindowsConsoleApp
{
public class FileWatchTest
{ #region 32位程序访问64位系统文件
// 关闭64位(文件系统)的操作转向
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
// 开启64位(文件系统)的操作转向
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr); // IntPtr oldWOW64State = new IntPtr();
// Wow64DisableWow64FsRedirection(ref oldWOW64State); private bool disabled = false;
private IntPtr oldWOW64State = new IntPtr(); /// <summary>
/// 禁止64位系统转向(true关闭转向,false开启)
/// </summary>
public bool DisableWow64
{
get
{
return disabled;
}
set
{
if (disabled == value)
{
return;
} disabled = value; if (disabled)
{
Wow64RevertWow64FsRedirection(oldWOW64State);
}
else
{
Wow64RevertWow64FsRedirection(oldWOW64State);
} }
}
#endregion public void StartWatch(string path, string filter)
{
FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = path;
watcher.IncludeSubdirectories = false; //设置是否监控目录下的所有子目录
//watcher.Filter = "*.txt|*.doc|*.jpg"; //设置监控文件的类型
watcher.Filter = filter;
watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.FileName; //设置文件的文件名、目录名及文件的大小改动会触发Changed事件 watcher.Changed += new FileSystemEventHandler(OnProcess);
watcher.Created += new FileSystemEventHandler(OnProcess);
watcher.Deleted += new FileSystemEventHandler(OnProcess);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
watcher.Error += new ErrorEventHandler(OnError);
watcher.EnableRaisingEvents = true;
} #region 监控事件 private static void OnProcess(object source, FileSystemEventArgs e)
{
if (e.ChangeType == WatcherChangeTypes.Created)
{
OnCreated(source, e); }
else if (e.ChangeType == WatcherChangeTypes.Changed)
{
OnChanged(source, e); }
else if (e.ChangeType == WatcherChangeTypes.Deleted)
{
OnDeleted(source, e); }
else
{
OnOther(source, e);
}
} private static void OnCreated(object source, FileSystemEventArgs e)
{ Console.WriteLine("新建"); } private static void OnChanged(object source, FileSystemEventArgs e)
{ Console.WriteLine("改变");
} private static void OnDeleted(object source, FileSystemEventArgs e)
{ Console.WriteLine("删除");
} private static void OnRenamed(object source, RenamedEventArgs e)
{ Console.WriteLine("重命名");
}
private static void OnOther(object source, FileSystemEventArgs e)
{ Console.WriteLine("其他"); }
private static void OnError(object source, ErrorEventArgs e)
{ Console.WriteLine("错误" + e.GetException()); } #endregion
}
}
.NET拾忆:FileSystemWatcher 文件监控的更多相关文章
- .NET拾忆:FormData文件上传
方法1.FormData简单实现 后端: using System; using System.Collections.Generic; using System.IO; using System.L ...
- 在C#使用文件监控对象FileSystemWatcher的几种方案
最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给web服务 ...
- 使用文件监控对象FileSystemWatcher实现数据同步
最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给WEB服务 ...
- C#使用文件监控对象FileSystemWatcher 实现数据同步
在C#使用文件监控对象FileSystemWatcher 实现数据同步 2013-12-12 18:24 by 幕三少, 352 阅读, 3 评论, 收藏, 编辑 最近在项目中有这么个需求,就是得去实 ...
- C#使用FileSystemWatcher控件实现的文件监控功能示例
本文实例讲述了C#使用FileSystemWatcher控件实现的文件监控功能.分享给大家供大家参考,具体如下: FileSystemWatcher 可以使用FileSystemWatcher组件监视 ...
- C#使用FileSystemWatcher来监控指定文件夹,并使用TCP/IP协议通过Socket发送到另外指定文件夹
项目需求: 局域网内有两台电脑,电脑A(Windows系统)主要是负责接收一些文件(远程桌面粘贴.FTP上传.文件夹共享等方式),希望能在A接收文件后自动传输到电脑B(Windows系统)来做一个备份 ...
- java实现文件监控
文件监控器: package testfile; import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; import ...
- .Net拾忆:从List去除重复-拾忆集合
方法1: private static List<int> DistinctList(List<int> list) {//去除重复 HashSet<int> ha ...
- Nodejs文件监控chokidar
最近有个需求是扫描用例,用例是放在svn上,如果每次扫描都去遍历目录的话会有占用太多的io,所以想着用文件监控,有文件变化时只对该文件进行操作. Nodejs里的 chokidar 模块可以更好的对文 ...
随机推荐
- easyui---表单验证
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- hdu4300 Clairewd’s message【next数组应用】
Clairewd’s message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- TOP100summit:【分享实录】京东1小时送达的诞生之路
本篇文章内容来自2016年TOP100summit 京东WMS产品负责人李亚曼的案例分享. 编辑:Cynthia 李亚曼:京东 WMS产品负责人.从事电商物流行业近10年,有丰富的物流行业经验,独立打 ...
- select cast(round(12.5,2) as numeric(5,2))
http://www.jb51.net/article/74284.htm 解释: round()函数,是四舍五入用,第一个参数是我们要被操作的数据,第二个参数是设置小数四舍五入的精度. )--32. ...
- 关于ti环境搭建 IAR 为什么IAR不能跳转的真正原因
1.IAR工程莫名其妙的错误,可以通过复制工程文件来解决 2.cc2540环境配置,尽量默认到c盘,以便解决不必要的麻烦,另外,不同的库尽量安装对应的环境文件,比如freertos等环境 3.对于蓝牙 ...
- Codeforces 191A - Dynasty Puzzles - [DP]
题目链接:https://codeforces.com/problemset/problem/191/A 题意: 给出 $n$ 个小写字母组成的字符串,两个字符串如果前者的最后一个字母与后者的首字母相 ...
- gensim Word2Vec 训练和使用(Model一定要加载到内存中,节省时间!!!)
训练模型利用gensim.models.Word2Vec(sentences)建立词向量模型该构造函数执行了三个步骤:建立一个空的模型对象,遍历一次语料库建立词典,第二次遍历语料库建立神经网络模型可以 ...
- linux之无公网ip的自动登录
场景 对于有公网ip的链接方式我们都比较清楚了,但是有些服务器不允许直接登录或者没有直接登录的公网ip,所以只能通过一个可以直接登录的堡垒机跳转.这时需要你手动去敲ssh远程链接命令(例如:ssh r ...
- 通过pytty工具代理连接数据库mysql(绕开数据库白名单限制)
1.下载putty在本机,不用安装. 2.数据库地址及端口,输入服务器账户.密码登录. 输入数据库地址.端口及本机映射端口 输入服务器账户.密码登录 然后本地新建数据库连接就可以了
- 20170811 JQuery基础知识学习记录(一)
基本写法 $(selector).action() $(this).hide() - 隐藏当前元素 $("p").hide() - 隐藏所有 <p> 元素 $(&quo ...