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#文件监控的源码,希望对大家学习有帮助:

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

转载自原文地址:http://blog.csdn.net/czw2010/article/details/7916262

FileSystemWatcher使用方法的更多相关文章

  1. FileSystemWatcher使用方法具体解释

    FileSystemWatcher控件主要功能: 监控指定文件或文件夹的文件的创建.删除.修改.重命名等活动.能够动态地定义须要监控的文件类型及文件属性修改的类型. 1.经常使用的几个基本属性: (1 ...

  2. C#控件列表

      ID 类 控件 备注(+窗体 共64个控件) 公共控件 1   Form 属性   方法   事件 2   Button 属性   方法   事件 3   checkbox 属性   方法   事 ...

  3. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  4. 轮询方法FileSystemWatcher

    具体实现 FileSystemWatcher watcher = new FileSystemWatcher(WriteBackDir, "*result.txt"); watch ...

  5. C# 之 FileSystemWatcher事件多次触发的解决方法

    1.问题描述  程序里需要监视某个目录下的文件变化情况: 一旦目录中出现新文件或者旧的文件被覆盖,程序需要读取文件内容并进行处理.于是使用了下面的代码: public void Initial() { ...

  6. 使用FileSystemWatcher监控文件夹及文件

    引言 这一周主要精力集中学习一个同事开发的本地文件搜索项目上,其中客户端添加共享文件时主要是使用FileSystemWatcher 监控文件,并在各种事件发生时向服务器发送消息. 解决方法 FileS ...

  7. C#回顾 - 2.NET的IO:Path、File、FileInfo、Directory、DirectoryInfo、DriveInfo、FileSystemWatcher

        1.管理文件系统 一般而言,应用程序都会有保存数据.检索数据的需求. 1.1 使用 path 类来访问文件路径 [path常用的方法]:http://www.cnblogs.com/tangg ...

  8. FileSystemWatcher

    转:http://www.cnblogs.com/zhaojingjing/archive/2011/01/21/1941586.html 注意:用FileWatcher的Created监控文件时,是 ...

  9. FileSystemWatcher用法详解

    FileSystemWatcher控件主要功能: 监控指定文件或目录的文件的创建.删除.改动.重命名等活动.可以动态地定义需要监控的文件类型及文件属性改动的类型. 1.常用的几个基本属性: (1) P ...

随机推荐

  1. OI中神奇的神器fillchar

    传说,Pascal中有一个函数——fillchar.这是高手们装*用的利器,也是大家的神器(大家好才是真的好). 神器介绍: 百度百科说:“Fillchar是Turbo/Borland Pascal的 ...

  2. 转 Java中Filter、Servlet、Listener的学习

      1.Filter的功能filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个requ ...

  3. 08_Lambda表达式与匿名内部类的联系与区别

    [简述] Lambda表达式是匿名内部类的一种简化,因此它可以取代匿名内部类的作用. [Lambda表达式与匿名内部类的 相同点] 1.Lambda表达式和匿名内部类一样,都可以直接访问"e ...

  4. 19_高级映射:一对多查询(使用resultMap)

    [需求] 查询订单以及订单明细的信息. 确定主查询表:订单表orders 确定关联查询表:订单明细表 orderdetail 在一对一查询的基础上添加订单明细表关联即可. [分析] 使用resultM ...

  5. asp.net弹出框后页面走样

    1.去掉language='javascript' ,问题依旧 2.后面加上Response.Write("<script>document.location=document. ...

  6. CentOS7 查看ip

    查看内网:ip addr 查看公网:curl members.3322.org/dyndns/getip

  7. 基于libuv库的UDP收/发广播消息代码实现

    uv_send(发送端): #include "uv.h" #include "task.h" #include <stdio.h> #includ ...

  8. php判断手机浏览还是web浏览,并执行相应的动作

    正好需要,在网上找了好久,记录一下 function isMobile(){ $useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTT ...

  9. OFBiz之SVN下载地址

    trunk: $ svn co http://svn.apache.org/repos/asf/ofbiz/trunk ofbiz release13.07: $ svn co http://svn. ...

  10. 【toplink】 位居第一的Java对象关系可持续性体系结构

    TopLink,是位居第一的Java对象关系可持续性体系结构,原署WebGain公司的产品,后被Oracle收购,并重新包装为Oracle AS TopLink.TOPLink为在关系数据库表中存储 ...