C# FileSystemWatcher用法详解

摘要:
FileSystemEventArgs对象:成员:名称:获取受影响文件或目录的名称。FileSystemWatcherfsw=新文件系统观察程序();fsw.路径=“C:\\”;//设置受监视的文件目录fsw。IncludeSubdirectories=true//设置监控C磁盘目录下的所有子目录//fsw。Filter=“*.txt|*.doc|*.jpg”//设置监控文件fsw的类型。NotifyFilter=通知过滤器。文件名|通知过滤器。DirectoryName|NotifyFilters。大小//更改的事件fsw。Created+=newFileSystemEventHandler将在文件的文件名、目录名和文件大小发生更改时触发//触发绑定事件后处理数据的方法。
C# FileSystemWatcher用法详解

2012年08月28日 17:36:52夜之子阅读数 35327

版权声明:本文为博主原创文章,转载请注明原出处,谢谢! https://blog.csdn.net/czw2010/article/details/7916262

FileSystemWatcher控件主要功能:

监控指定文件或目录的文件的创建、删除、改动、重命名等活动。可以动态地定义需要监控的文件类型及文件属性改动的类型。

1.常用的几个基本属性:

(1) Path:设置要监视的目录的路径。

(2) IncludeSubdirectories:设置是否级联监视指定路径中的子目录。

(3) Filter:设置筛选字符串,用于确定在目录中监视哪些类型的文件。

(4) NotifyFilter:设置文件的哪些属性的变动会触发Changed事件,同时监控多个属性变动可以按“或”组合。(默认值为 NotifyFilter.LastWrite | NotifyFilter.FileName | NotifyFilter.DirectoryName 组合)

子项:Attributes -- 文件或文件夹的属性。
CreationTime -- 文件或文件夹的创建时间。
DirectoryName-- 目录名。(常用)
FileName -- 文件名。(常用)
LastAccess -- 文件或文件夹上一次打开的日期。
LastWrite -- 上一次向文件或文件夹写入内容的日期。
Security -- 文件或文件夹的安全设置。
Size -- 文件或文件夹的大小。 (常用)

(5) EnableRaisingEvents:设置是否开始监控。(默认为false)

2.常用事件:

(1) Changed :当更改文件和目录时发生,可以通过NotifyFilter属性设置触发该事件的需要文件更改的属性。

(2) Created: 当创建文件和目录时发生。

(3) Deleted: 删除文件或目录时发生。

(4) Renamed :重命名文件或目录时发生。

(5) FileSystemEventArgs对象:

成员:Name:获取受影响的文件或目录的名称。注意:如果是级联监控子目录的话,该值为从监控目录的下个目录到受影响的文件的路径,而不只是受影响的文件名。

FullPath: 获取受影响的文件或目录的完全限定的路径。

ChangeType:获取受影响的文件或目录的发生的事件类型。

子项:All -- 文件或文件夹的创建、删除、更改或重命名。
Changed -- 文件或文件夹的更改。更改的类型包括大小、属性、安全设置、最近写入时间和最近访问时间方面的更改。
Created -- 文件或文件夹的创建。
Deleted -- 文件或文件夹的删除。
Renamed -- 文件或文件夹的重命名。

(6) RenamedEventArgs对象:

成员:Name:获取受影响的文件或目录的新名称。

OldName: 获取受影响的文件或目录的旧名称。

FullPath: 获取受影响的文件或目录的完全限定的路径。

OldFullPath :获取受影响的文件或目录的前一个完全限定的路径。

ChangeType:获取受影响的文件或目录的发生的事件类型。

子项:All -- 文件或文件夹的创建、删除、更改或重命名。
Changed -- 文件或文件夹的更改。更改的类型包括大小、属性、安全设置、最近写入时间和最近访问时间方面的更改。
Created -- 文件或文件夹的创建。
Deleted -- 文件或文件夹的删除。
Renamed -- 文件或文件夹的重命名。


演示源码:


  1. private delegate void setLogTextDelegate(FileSystemEventArgs e); //声明传递FileSystemEventArgs对象的委托,用于文件Created,Deleted和Changed变动时更新UI界面。

  2. private delegate void renamedDelegate(RenamedEventArgs e); //声明传递RenamedEventArgs对象的委托,用于文件Renamed时更新UI界面。

  3. FileSystemWatcher fsw= new FileSystemWatcher();

  4. fsw.Path = “C:\\”; //设置监控的文件目录

  5. fsw.IncludeSubdirectories = true; //设置监控C盘目录下的所有子目录

  6. //fsw.Filter = "*.txt|*.doc|*.jpg"; //设置监控文件的类型(看到大家的评论,暂时没时间测试,文件过滤监控的大家自己测试)

  7. fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size; //设置文件的文件名、目录名及文件的大小改动会触发Changed事件

  8. fsw.Created += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle); //绑定事件触发后处理数据的方法。

  9. fsw.Deleted += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle);

  10. fsw.Changed += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle);

  11. fsw.Renamed += new RenamedEventHandler(this.fileSystemWatcher_Renamed); //重命名事件与增删改传递的参数不一样。

  12. fsw.EnableRaisingEvents = true; //启动监控

  13. private void fileSystemWatcher_EventHandle(object sender, FileSystemEventArgs e) //文件增删改时被调用的处理方法

  14. {

  15. if (this.listView1.InvokeRequired) //判断是否跨线程

  16. {

  17. this.listView1.Invoke(new setLogTextDelegate(setLogText), new object[] { e }); //使用委托将方法封送到UI主线程处理

  18. }

  19. }

  20. private void fileSystemWatcher_Renamed(object sender,RenamedEventArgs e) //文件重命名时被调用的处理方法

  21. {

  22. if (this.listView1.InvokeRequired) //判断是否跨线程

  23. {

  24. this.listView1.Invoke(new renamedDelegate(setRenamedLogText), new object[] { e }); //使用委托将方法封送到UI主线程处理

  25. }

  26. }

  27. private void setLogText(FileSystemEventArgs e) //更新UI界面

  28. {

  29. ListViewItem lvi = new ListViewItem();

  30. lvi.SubItems.Add(e.Name); //受影响的文件名

  31. lvi.SubItems.Add(e.ChangeType.ToString()); //受影响文件的变动类型(可能为Created、Changed、Deleted)

  32. lvi.SubItems.Add(e.FullPath); //受影响的文件完整路径

  33. this.listView1.Items.Add(lvi);

  34. }

  35. private void setRenamedLogText(RenamedEventArgs e) //更新UI界面

  36. {

  37. ListViewItem lvi = new ListViewItem();

  38. lvi.SubItems.Add(e.OldName); //受影响的文件的原名

  39. lvi.SubItems.Add(e.ChangeType.ToString()); //受影响的文件的改动类型(Rename)

  40. lvi.SubItems.Add(e.Name); //受影响的文件的新名

  41. lvi.SubItems.Add(e.OldFullPath); //受影响的文件的原路径

  42. lvi.SubItems.Add(e.FullPath); //受影响的文件的完整路径(其实和原路径一样)

  43. this.fileEventLog_lvw.Items.Add(lvi);

  44. }

重点:

1.、因为FileSystemWatcher类本身就是多线程的控件,也就是每实例化一个FileSystemWatcher自动就会创建一条线程。

2、我们需要利用委托进行跨线程更新UI界面,因为重命名事件传递的是RenameEventArgs对象,而创建、修改、删除事件传递的是FileEventArgs对象,所以需要声明两个委托。

3、如果需要同时监控多个文件(如监控系统全盘),只需要创建FileSystemWatcher数组,每个文件用一个FileSystemWatcher进行监控。

实例效果:

C# FileSystemWatcher用法详解第1张

现放上以上C#文件监控的源码,希望对大家学习有帮助:

源码下载地址:http://download.csdn.net/detail/czw2010/4912798

转载请注明转自本文,原文地址:http://blog.csdn.net/czw2010/article/details/7916262

免责声明:文章转载自《C# FileSystemWatcher用法详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IE “浏览器模式”和“文档模式”的区别cmake编译多个文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

现代软件构建系统的使用 CMake简介

现代软件构建系统的使用 CMake简介 - 程序即人生 - 博客频道 - CSDN.NET 现代软件构建系统的使用 CMake简介 分类:【Linux】2009-10-29 15:393113人阅读评论(1)收藏举报 目录(?)[+] 现代软件构建系统的使用 CMake简介 前言CMake的主要优点: CMake安装 没有用CMake之前 C...

NSIS 2.0界面快速入门

NSIS 2.0 版本支持定制的用户界面。所谓的 Modern UI(下称 MUI) 就是一种模仿最新的 Windows 界面风格的界面系统。MUI 改变了 NSIS 脚本的编写习惯,它使用 NSIS 的宏来表达,指定 MUI 的属性需要使用宏。所以,诸如 LicenseText, Icon, CheckBitmap, InstallColors 在 MU...

ali-oss-upload-cli 命令上传文件到 OSS 桶

使用 ali-oss-upload-cli 插件 https://www.npmjs.com/package/ali-oss-upload-cli 1. 安装 npm install --save ali-oss-upload-cli 2. 在项目根目录下创建文件oss.config.js, 与 package.json 同级 module.exports...

4通用Makefile编写

a.c #include<stdio.h>#include "a.h" intmain() { printf("hello world "); printf("A= %d ",A); test_fun(); return 0; } a.h #define A 1 b.c #include <st...

Windows 桌面主题,桌面背景

一.桌面主题的构成 一个XP的桌面主题可以包含好几个部分,风格、壁纸、屏保、鼠标指针、系统声音事件、图标,除了风格是必须的之外,其他部分都是可选的。风格可以定义的内容是大家在Windows里所能看到的一切,例如窗口的外观、字体、颜色,按钮的外观等等等等,一个桌面主题里风格就决定了大家所看到的Windows的样子。 大家可以打开 X:\Windows\R...

批处理脚本

常用dos命令 批处理复制文件(文件夹) 1.复制C:ae.txt 文本文件到d:文件夹下面【复制完的目录结构应该为d:e.txt】xcopy /y c:ae.txt d: >nul2.复制C:a文件夹及其内所有东西(包括隐藏,系统文件)到D:文件夹下面【 a文件夹也要复制过去,也就是说,复制之后,a文件夹应该在b文件夹下】xcopy /y /e...