System.IO.FileSystemWatcher 监视目录文件的状态

来源:互联网 发布:36-2客户端数据异常 编辑:程序博客网 时间:2024/05/03 13:46

System.IO.FileSystemWatcher

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 文件或文件夹的大小。 

原创粉丝点击