zoukankan      html  css  js  c++  java
  • FileSystemWatcher使用方法具体解释

    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   --  文件或目录的重命名。 


    演示源代码:

    private delegate void setLogTextDelegate(FileSystemEventArgs e); //声明传递FileSystemEventArgs对象的托付,用于文件Created,Deleted和Changed变动时更新UI界面。
    
    private delegate void renamedDelegate(RenamedEventArgs e);  //声明传递RenamedEventArgs对象的托付,用于文件Renamed时更新UI界面。
    
    FileSystemWatcher fsw= new FileSystemWatcher();
    
    fsw.Path = “C:\”;   //设置监控的文件文件夹
    
    fsw.IncludeSubdirectories = true;   //设置监控C盘文件夹下的全部子文件夹
    
    fsw.Filter = "*.txt|*.doc|*.jpg";   //设置监控文件的类型
    
    fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;   //设置文件的文件名称、文件夹名及文件的大小修改会触发Changed事件
    
    fsw.Created += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle);  //绑定事件触发后处理数据的方法。
    
    fsw.Deleted += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle);
    
    fsw.Changed += new FileSystemEventHandler(this.fileSystemWatcher_EventHandle);
    
    fsw.Renamed += new RenamedEventHandler(this.fileSystemWatcher_Renamed);  //重命名事件与增删改传递的參数不一样。
    
    fsw.EnableRaisingEvents = true;  //启动监控
    
    private void fileSystemWatcher_EventHandle(object sender, FileSystemEventArgs e)  //文件增删改时被调用的处理方法
    {
         if (this.listView1.InvokeRequired)  //推断是否跨线程
          {
               this.listView1.Invoke(new setLogTextDelegate(setLogText), new object[] { e });   //使用托付将方法封送到UI主线程处理
          }
    }
    
    private void fileSystemWatcher_Renamed(object sender,RenamedEventArgs e)   //文件重命名时被调用的处理方法
    {
          if (this.listView1.InvokeRequired) //推断是否跨线程
           { 
               this.listView1.Invoke(new renamedDelegate(setRenamedLogText), new object[] { e });  //使用托付将方法封送到UI主线程处理
           }
    }
    
    private void setLogText(FileSystemEventArgs e)  //更新UI界面
    {
          ListViewItem lvi = new ListViewItem();
    
          lvi.SubItems.Add(e.Name);   //受影响的文件名称
    
          lvi.SubItems.Add(e.ChangeType.ToString());   //受影响文件的变动类型(可能为Created、Changed、Deleted)
    
          lvi.SubItems.Add(e.FullPath);     //受影响的文件完整路径
    
          this.listView1.Items.Add(lvi);
    }
    
     private void setRenamedLogText(RenamedEventArgs e)  //更新UI界面
    {
           ListViewItem lvi = new ListViewItem();
    
           lvi.SubItems.Add(e.OldName);   //受影响的文件的原名
    
           lvi.SubItems.Add(e.ChangeType.ToString());  //受影响的文件的修改类型(Rename)
    
           lvi.SubItems.Add(e.Name);   //受影响的文件的新名
    
           lvi.SubItems.Add(e.OldFullPath);     //受影响的文件的原路径
    
           lvi.SubItems.Add(e.FullPath);  //受影响的文件的完整路径(事实上和原路径一样)
    
           this.fileEventLog_lvw.Items.Add(lvi);
    
     }

    重点:

    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


  • 相关阅读:
    Notes about "Exploring Expect"
    Reuse Sonar Checkstyle Violation Report for Custom Data Analysis
    Eclipse带参数调试的方法
    MIT Scheme Development on Ubuntu
    Manage Historical Snapshots in Sonarqube
    U盘自动弹出脚本
    hg的常用配置
    Java程序员的推荐阅读书籍
    使用shared memory 计算矩阵乘法 (其实并没有加速多少)
    CUDA 笔记
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4065106.html
Copyright © 2011-2022 走看看