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

c# FileSystemWatcher控件的使用方法

1、FileSystemWatcher用途:

    FileSystemWatcher 元件用來監視檔案系統,而當檔案系統所包含的目錄或檔案變更時,也可以利用它來回應。這讓您能夠在特定檔案或目錄被建立、修改或刪除時快速且容易啟動商務處理流程。
     注:FileSystemWatcher元件是設計來監視目錄內的變更,而不是根目錄屬性本身的變更。Changed:變更目錄或檔案的大小、系統屬性、上次寫入時間、上次存取時間或安全性權限時引發。

 


2、FileSystemWatcher常用屬性

名稱

說明

EnableRaisingEvents

獲取或設置一個值,該值指示是否啟用此元件。

Filter

獲取或設置篩選字串,用於確定在目錄中監視哪些檔。

IncludeSubdirectories

獲取或設置一個值,該值指示是否監視指定路徑中的子目錄。

InternalBufferSize

獲取或設置內部緩衝區的大小。

NotifyFilter

獲取或設置要監視的更改類型。

Path

獲取或設置要監視的目錄的路徑。

SynchronizingObject

獲取或設置一個物件,該物件用於封送因目錄更改而發出的事件處理程式調用。


3、FileSystemWatcher常用事件

名稱

說明

Changed

當更改指定 Path中的檔和目錄時發生。變更目錄或檔案的大小、系統屬性、上次寫入時間、上次存取時間或安全性權限時引發。

Created

當在指定 Path中創建檔和目錄時發生。

Deleted

刪除指定 Path中的檔或目錄時發生。

Error

當內部緩衝區溢出時發生。

Renamed

重命名指定 Path中的檔或目錄時發生。


4、FileSystemWatcherFilter屬性通配符說明

篩選器字串

監視下列檔

*.*

所有檔(預設值)。空字串 ("") 同樣監視所有檔。

*.txt

具有“txt”副檔名的所有檔。

*recipe.doc

檔案名以“recipe”結尾且具有“doc”副檔名的所有檔。

win*.xml

檔案名以“win”開頭且具有“xml”副檔名的所有檔。

Sales*200?.xls

匹配下列文件:
Sales July 2001.xls
、Sales Aug 2002.xls、Sales March 2004.xls
但不匹配:
Sales Nov 1999.xls

MyReport.Doc

只監視 MyReport.doc


5、FileSystemWatcherNotifyFilter枚舉值說明

成員名稱

說明

Attributes

檔或檔夾的屬性。 

CreationTime

檔或檔夾的創建時間。 

DirectoryName

目錄名。 

FileName

檔案名。 

LastAccess

檔或檔夾上一次打開的日期。 

LastWrite

上一次向檔或檔夾寫入內容的日期。 

Security

檔或檔夾的安全設置。 

Size

文件或文件夾的大小。 

    以上可組合此枚舉的成員以監視多種更改。組合時用“|”連接。

6、使用方法:
    6.1、在窗體中拖入FileSystemWatcher控制項。
    6.2、設定必要屬性
    6.3、設定需要用的事件
    6.4、編寫事件方法

7、示例代碼:

 

using  System.IO;

namespace  FileSystemWatcherDemo
{
    
public   partial   class  Form1 : Form
    {        
        
public  Form1()
        {
            InitializeComponent();

            
            UsingFileSystemWatcher();
        } 
      
        
///   <summary>
        
///  使用FileSystemWatcher方法
        
///   </summary>
         void  UsingFileSystemWatcher()
        {
            //6.2
            
// FileSystemWatcher:侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。
            
// 获取或设置要监视的目录的路径。
            fswWatcher.Path  =   @" D:\upload " ;
            
// 获取或设置要监视的更改类型。
            fswWatcher.NotifyFilter  =  NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.LastAccess ;
            
// 获取或设置筛选字符串,用于确定在目录中监视哪些文件。
            
// 此處只能監控某一種文件,不能監控件多種文件,但可以監控所有文件
            fswWatcher.Filter  =   " *.doc " ;
            
// 获取或设置一个值,该值指示是否监视指定路径中的子目录。
            fswWatcher.IncludeSubdirectories  =   true ;
            

            
#region 6.3 觸發的事件

            
// 文件或目錄創建時事件
            fswWatcher.Created  +=   new  FileSystemEventHandler(fswWatcher_Created);
            
// 文件或目錄變更時事件
            fswWatcher.Changed  +=   new  FileSystemEventHandler(fswWatcher_Changed);
            
// 文件或目錄重命名時事件
            fswWatcher.Renamed  +=   new  RenamedEventHandler(fswWatcher_Renamed);
            
// 文件或目錄刪除時事件
            fswWatcher.Deleted  +=   new  FileSystemEventHandler(fswWatcher_Deleted);

            
#endregion

            
// 获取或设置一个值,该值指示是否启用此组件。
            fswWatcher.EnableRaisingEvents  =   true ;

        }

        
#region 6.4 觸發事件的方法

        
///   <summary>
        
///  文件或目錄創建時事件方法
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         void  fswWatcher_Created( object  sender, FileSystemEventArgs e)
        {
            MessageBox.Show(
" 有新文件 " );
        }

        
///   <summary>
        
///  文件或目錄變更時事件的方法
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         void  fswWatcher_Changed( object  sender, FileSystemEventArgs e)
        {
        }

        
///   <summary>
        
///  文件或目錄重命名時事件的方法
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         void  fswWatcher_Renamed( object  sender, RenamedEventArgs e)
        {
        }

        
///   <summary>
        
///  文件或目錄刪除時事件的方法
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         void  fswWatcher_Deleted( object  sender, FileSystemEventArgs e)
        {

        }
        
#endregion

    }
}

 


8、其它說明 :(轉自:http://www.cnblogs.com/RicCC/archive/2006/12/16/FileSystem-Watcher.html)
    8.1有人想同时监控多种类型的文件,例如*.xml + *.config,发现Filter属性不支持这种设置(只能够设置一种)。这种情况下可以将Filter属性设成*.*,在事件里用if (e.FullPath.EndsWith(".xml") || e.FullPath.EndsWith(".config"))自己判断过滤一下。记得Filter属性的设置并不会减少进入缓冲区的事件通知,因此上面的方法并不会带来多少性能损失。
   8.2. BufferSize

    Windows操作系统使用FileSystemWatcher创建的一个内存缓冲区通知程序文件的修改信息,如果在很短的时间内有非常多的文件修改,这个缓冲区会溢出, 造成部分追踪丢失,并且FileSystemWatcher不会产生异常。加大InternalBufferSize属性值可以避免这种情况。
    InternalBufferSize默认值是8K,可以设置的最小值是4K,增加或减小InternalBufferSize最好用4K的整数倍。每一个事件通知需要使用16字节,并不包含文件名。InternalBufferSize的内存来自non-paged内存,注意这部分内存资源比较宝贵。
    使用NotifyFilter、IncludeSubdirectories属性减小trace范围,设置filter属性并不会影响进入缓冲区的事件通知,另外尽快的完成事件处理,也是避免缓冲区溢出造成事件丢失的一个措施。
    8.3. 隐藏文件也会监控
    8.4 有些系统中,FileSystemWatcher的事件里对长文件名使用8.3短文件名方式表示。

转载于:https://www.cnblogs.com/82767136/articles/1254494.html

相关文章:

  • Android 自己定义View学习(2)
  • redis订阅/发布 分享
  • 红与黑
  • 读取Web.Config中的设置参数之二
  • 自学有感7
  • Http之Get/Post请求区别
  • 清河好程序猿训练营是什么?
  • 分享:Ajax工具文件
  • 洛谷P1287 盒子与球 数学
  • 识别地图上的地名-- 笔记一
  • 如何破解来自私有云的安全挑战
  • SQL优化34条[转载]
  • 你的每行代码值多少钱?
  • 日常开发工作快照(一)
  • Catalog Service - 解析微软微服务架构eShopOnContainers(三)
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript标准库系列——Math对象和Date对象(二)
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python_网络编程
  • python3 使用 asyncio 代替线程
  • windows下mongoDB的环境配置
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 编写高质量JavaScript代码之并发
  • 搭建gitbook 和 访问权限认证
  • 分享一份非常强势的Android面试题
  • 你真的知道 == 和 equals 的区别吗?
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 使用agvtool更改app version/build
  • #if #elif #endif
  • #QT(串口助手-界面)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (C语言)逆序输出字符串
  • (poj1.3.2)1791(构造法模拟)
  • (补)B+树一些思想
  • (定时器/计数器)中断系统(详解与使用)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (过滤器)Filter和(监听器)listener
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (五)MySQL的备份及恢复
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net程序集学习心得
  • @Autowired多个相同类型bean装配问题
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [04]Web前端进阶—JS伪数组
  • [BJDCTF 2020]easy_md5
  • [C++]:for循环for(int num : nums)
  • [flask] flask的基本介绍、flask快速搭建项目并运行
  • [hdu 4405] Aeroplane chess [概率DP 期望]