通过编程监测特定文件
2015-12-24 14:53
447 查看
/*使用 FileSystemWatcher 监视指定目录中的更改。 可监视指定目录中的文件或子目录的更改。 *可以创建一个组件来监视本地计算机、网络驱动器或远程计算机上的文件。 *若要监视所有文件中的更改,请将 Filter 属性设置为空字符串 ("") 或使用通配符(“*.*”)。 *若要监视特定的文件,请将 Filter 属性设置为该文件名。 例如,若要监视文件 MyDoc.txt *中的更改,请将 Filter 属性设置为“MyDoc.txt”。 也可以监视特定类型文件中的更改。 *例如,若要监视文本文件中的更改,请将 Filter 属性设置为“*.txt”。 *可监视目录或文件中的若干种更改。 例如,可监视文件或目录的 Attributes、LastWrite *日期和时间或 Size 方面的更改。 通过将 NotifyFilter 属性设置为 NotifyFilters *值之一来达到此目的。 有关可监视的更改类型的更多信息,请参见 NotifyFilters。 *可监视文件或目录的重命名、删除或创建。 例如,若要监视文本文件的重命名,请将 Filter *属性设置为“*.txt”,并使用为其参数指定的 Renamed 来调用 WaitForChanged 方法。 *Windows 操作系统在 FileSystemWatcher 创建的缓冲区中通知组件文件发生更改。 *如果短时间内有很多更改,则缓冲区可能会溢出。 这将导致组件失去对目录更改的跟踪, *并且它将只提供一般性通知。 使用 InternalBufferSize 属性来增加缓冲区大小的开销较大, *因为它来自无法换出到磁盘的非页面内存,所以应确保缓冲区大小适中(尽量小,但也要有足够大小 *以便不会丢失任何文件更改事件)。 若要避免缓冲区溢出,请使用 NotifyFilter 和 *IncludeSubdirectories 属性,以便可以筛选掉不想要的更改通知。 */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace DirectoryWatcher { class Program { static void Main(string[] args) { //在程序的当前目录下创建一个文件夹,并且在这个文件夹下创建很多文件 //当前目录就是程序目录\bin\debug目录 string currentDirectory=Directory.GetCurrentDirectory (); string currentPath=currentDirectory +"\\myfolder2"; //DirectoryInfo newFilePath = new DirectoryInfo(@currentDirectory); //newFilePath. if (!Directory.Exists(@currentPath)) { Directory.CreateDirectory(@currentPath); } //①建立FileSystemWatcher实例对象 FileSystemWatcher watcher = new FileSystemWatcher(); try { //②确定指向要观察的目录的路径 watcher.Path = @currentPath; } catch (ArgumentException e) { Console.WriteLine(e.Message); return; } //③设置需要留意的事情 watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; //④只观察txt文件 watcher.Filter = "*.txt"; //⑤添加要检测的文件的时间行为,当更改指定的path中的目录或者文件时发生 watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed); //⑥开始观察文件 watcher.EnableRaisingEvents = true; Console.WriteLine(@"Press 'q' to quit the app"); while (Console.Read() != 'q') ; //Console.ReadLine(); } /// <summary> /// 指定当前文件或者目录改变、创建、修改或者删除的时候所要做的行为 /// </summary> /// <param name="o"></param> /// <param name="e"></param> static void OnChanged(object o,FileSystemEventArgs e) { //获取受影响的文件或者目录的完全限定的路径 //获取所发生的目录事件的类型 Console.WriteLine("File: {0} {1}!", e.FullPath, e.ChangeType); } /// <summary> /// 指定当前文件或者目录重命名的时候所需要做的行为 /// </summary> /// <param name="o"></param> /// <param name="e"></param> static void OnRenamed(object o, RenamedEventArgs e) { //e.FullName获取受影响的文件或者目录的前一个完全限定的路径 //e.ChangeType获取所发生的目录事件的类型 Console.WriteLine("File: {0} {1}!", e.OldFullPath, e.FullPath); } } }
相关文章推荐
- c语言中的rand()函数和srand()函数产生随机的整数 (转载)
- JAVA基础知识整理记录
- Spring boot配置拦截器
- asp分页技术的实现
- 在Mac OS上搭建Python的开发环境
- python反射
- 使用CXF+spring+restful创建一个web的接口项目
- Resharper让我们的asp.net开发效率提高三分之一
- python的元类---类的类
- C++类型转换详解--const_cast
- 轻量级JavaEE企业应用实战(十六)
- java中字符串与时间转换
- Java 线程简介
- Java中Synchronized和Lock的使用
- jvm加载过程解析
- C++ Primer Plus 第六版(中文版)课后编程题----第四章
- struts 2 配置文件加载顺序
- php 读取csv大文件问题
- Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
- Jenkins FTP 上传