10.8 FileSystemWatcher(文件监视)组件

发布于:2025-02-10 ⋅ 阅读:(41) ⋅ 点赞:(0)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

FileSystemWatcher组件监视文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。FileSystemWatcher并不会监视指定目录自身的更改。

可以通过从工具箱向窗体拖放FileSystemWatcher组件或者直接代码建立FileSystemWatcher对象来使用该组件。

FileSystemWatcher常用属性:

  1. EnableRaisingEvents:指示是否启用此组件。
  2. Filter:用于确定在目录中监视哪些文件的筛选器字符串。此属性中可以使用通配符,“*”表示多个字符,“?”表示1个字符,例如:*.*表示所有文件:*.txt表示后缀为txt的文件;Alarm*.wav表示以Alarm开头、后缀为wav的文件;11.png表示仅11.png文件。
  3. IncludeSubdirectories:指示是否应监视指定路径中的子目录。
  4. InternalBufferSize:内部缓冲区的大小(以字节为单位)。
  5. NotifyFilter:要监视的更改的类型。这是一个NotifyFilters枚举,可通过Or来组合此枚举的成员以监视多种类型的更改,默认值为LastWrite、FileName和DirectoryName的组合。NotifyFilters枚举包含以下成员:
  1. Attributes:文件或文件夹的特性。
  2. CreationTime:文件或文件夹的创建时间。
  3. DirectoryName:目录名。
  4. FileName:文件名。
  5. LastAccess 文件或文件夹上一次打开的日期。
  6. LastWrite:上一次向文件或文件夹写入内容的日期。
  7. Security:文件或文件夹的安全设置。
  8. Size:文件或文件夹的大小。
  1. Path:要监视的目录的路径。

注意:必须设置Path属性,并将EnableRaisingEvents属性设置为True,才能实现文件监控,引发相应事件。

FileSystemWatcher常用事件:

  1. Changed:当指定Path中的文件或目录的大小、系统特性、最近写入时间、最近访问时间或安全权限进行更改时时发生。
  2. Created:在指定Path中创建文件和目录时发生。
  3. Deleted:删除指定Path中的文件或目录时发生。
  4. Renamed:重命名指定Path中的文件或目录时发生。
  5. Error:当FileSystemWatcher的实例无法继续监视更改或内部缓冲区溢出时发生。

以上事件中,Changed、Created、Deleted事件参数是FileSystemEventArgs类,Renamed事件参数是FileSystemEventArgs类;Error事件参数是ErrorEventArgs类,需要注意的是,该事件并没有在属性窗口的事件里面,需要手动增加。

1、FileSystemEventArgs类常用属性:

  1. ChangeType:获取所发生的目录事件的类型。这是一个WatcherChangeTypes枚举,包含以下成员:

All:文件或文件夹的创建、删除、更改或重命名。

Changed:文件或文件夹的更改。 更改的类型包括大小、特性、安全设置、最近写入时间和最近访问时间方面的更改。

Created:文件或文件夹的创建。

Deleted:文件或文件夹的删除。

Renamed:文件或文件夹的重命名。

  1. FullPath:获取受影响的文件或目录的完全限定的路径。
  2. Name:获取受影响的文件或目录的名称。

2、RenamedEventArgs类继承于FileSystemEventArgs类,比父类增加了2个常用属性:

  1. OldFullPath:获取受影响的文件或目录的前一个完全限定的路径。
  2. OldName:获取受影响的文件或目录的旧名称。

3、ErrorEventArgs类提供了一个方法:

  1. GetException:获取表示已发生的错误信息。

【例 10.33【项目:code10-033】监视目录文件系统更改。

       private void btnCommand_Click(object sender, EventArgs e)

        {

            //设置监视目录

            fileSystemWatcher1.Path = txtFolder.Text;

            //设置监视文件

            fileSystemWatcher1.Filter = txtFilter.Text;

            //设置监视子目录

            fileSystemWatcher1.IncludeSubdirectories = true;

            //设置监视类型

            fileSystemWatcher1.NotifyFilter = System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.DirectoryName | System.IO.NotifyFilters.LastWrite;

            if( btnCommand.Text == "开始监视")

            {

                fileSystemWatcher1.EnableRaisingEvents = true;

                btnCommand.Text = "停止监视";

            }

            else

            {

                fileSystemWatcher1.EnableRaisingEvents = false;

                btnCommand.Text = "开始监视";

            }

            fileSystemWatcher1.Error += FileSystemWatcher1_Error;

        }

        //文件或文件夹发生改变

        private void FileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)

        {

            lstWatchInfo.Items.Add(e.Name + "改变");

        }

        //文件或文件夹创建

        private void FileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)

        {

            lstWatchInfo.Items.Add(e.Name + "创建");

        }

        //文件或文件夹删除

        private void FileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e)

        {

            lstWatchInfo.Items.Add(e.Name + "删除");

        }

        //文件或文件夹重命名

        private void FileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e)

        {

            lstWatchInfo.Items.Add(e.OldName + "更改为:" + e.Name);

        }

        //发生错误

        private void FileSystemWatcher1_Error(object sender, System.IO.ErrorEventArgs e)

        {

            lstWatchInfo.Items.Add(e.GetException().Message);           

        }

运行结果如下图所示:

图10-21 获得lessons目录改变信息

 

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录


网站公告

今日签到

点亮在社区的每一天
去签到