您的位置:首页 > 编程语言

通过编程监测特定文件

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: