MSDN 说明:侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。
这两天看到论坛上关于如何监视目录文件的状态帖子很多,自己今天也在看System.IO下面的类,就顺便把他给看了,并实验了一下,其实此类用起来非常简单,不过有两三个地方需要注意下,下面把需要注意的地方说一下
System.IO.FileSystemWatcher watch = new FileSystemWatcher("D:\\1\\"); //初始化目录监视
watch.Filter = "*.txt"; //监视的对象,目录中监视哪些文件,默认为*.*
//不过这里有个好玩的地方,实验证明,通配符可以用在很多地方,比如可以设置成为 watch.Filter = "*.tx*"; 针对具体文件就写具体文件名
watch.Changed += new FileSystemEventHandler(watch_Changed); //文件改变事件
watch.Created += new FileSystemEventHandler(watch_Created); //文件添加事件
watch.Deleted += new FileSystemEventHandler(watch_Deleted); //文件删除事件
//otifyFilter:获取或设置要监视的更改类型。
//下面是csdn例子对文件属性的监视,这里有个问题,就是NotifyFilters.LastAccess | NotifyFilters.LastWrite同时设置的话 Changed事件会运行两次
//原因就是 LastAccess 文件或文件夹上一次打开的日期。 LastWrite 上一次向文件或文件夹写入内容的日期。 打开文件修改的时候会同时激发
//这个是要注意的第二点
watch.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite|NotifyFilters.FileName | NotifyFilters.DirectoryName;
//要注意的第三点,如果下面不设置为true,事件是不会运行的 EnableRaisingEvents 属性是指示是否启用此组件
watch.EnableRaisingEvents = true;
void watch_Deleted(object sender, FileSystemEventArgs e)
{
throw new Exception("The method or operation is not implemented.");
}
void watch_Created(object sender, FileSystemEventArgs e)
{
MessageBox.Show("新增");
}
void watch_Changed(object sender, FileSystemEventArgs e)
{
MessageBox.Show("改变");
}
//基本上要注意的就三点
1、文件类型过滤,可以指定文件
2、文件属性过滤,对修改到哪些文件属性监视
3、记得启用该组件,事件才会运行哦
其中能用到的文件属性也就四种 NotifyFilters有四种是用不到的
LastAccess | 文件或文件夹上一次打开的日期。 | |
LastWrite | 上一次向文件或文件夹写入内容的日期。 | |
Security | 文件或文件夹的安全设置。 | |
Size | 文件或文件夹的大小。 |