当前位置: 首页 > article >正文

10.8 FileSystemWatcher(文件监视)组件

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

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#教程 目录


http://www.kler.cn/a/525309.html

相关文章:

  • Vue-day2
  • 网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
  • 将ollama迁移到其他盘(eg:F盘)
  • Java面试题2025-并发编程基础(多线程、锁、阻塞队列)
  • 【llm对话系统】大模型 RAG 之回答生成:融合检索信息,生成精准答案
  • 小白爬虫冒险之反“反爬”:无限debugger、禁用开发者工具、干扰控制台...(持续更新)
  • k均值聚类将数据分成多个簇
  • 高级编码参数
  • 【Attention】KV Cache
  • TypeScript 学习 -类型 - 10
  • 快速提升网站收录:内容创作的艺术
  • 工具的应用——安装copilot
  • 高速PCB设计指南3——PCB 传输线和受控阻抗
  • 供应链系统设计-供应链中台系统设计(十)- 清结算中心概念片篇
  • Python3 【内置函数】:使用示例参考手册
  • JVM--类加载器
  • 超越传统图结构:记忆模拟新突破
  • C语言从入门到进阶
  • 【deepseek】本地部署DeepSeek R1模型:使用Ollama打造个人AI助手
  • 并发编程 - 线程同步(二)
  • 【2024年华为OD机试】 (A卷,200分)- 服务中心选址(JavaScriptJava PythonC/C++)
  • Python异步编程核武器:asyncio.gather() 的终极使用手册
  • 使用scikit-learn中的KNN包实现对鸢尾花数据集或者自定义数据集的的预测。
  • SpringBoot+Vue的理解(含axios/ajax)-前后端交互前端篇
  • 【开源免费】基于SpringBoot+Vue.JS社区智慧养老监护管理平台(JAVA毕业设计)
  • gif动画图像优化,相同的图在第2,4,6帧中重复出现,会增加图像体积吗?