关于FileSystemWatcher类

本文介绍如何使用.NET Framework中的System.IO.FileSystemWatcher类实现文件夹监控功能,包括监控文件的创建、删除、修改等事件,并解决了实际应用中的一些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类:System.IO.FileSystemWatcher

首次接触到这个类是在这样的一个用户需求中:
当时需要用一个路径导入资料进DB,导入成功后清除文件;本来新建了一个测试的文件夹,但是文件进来的时机等等不能跟实际相符;又不能直接上线至正式环境;
所以考虑到:将正式环境的文档实时的拷贝至测试环境,也就是文件同步。这才在网上找到这个类,用起来还是挺好的;可以监控文件、文件夹、新建、删除、编辑、修改时间等等。

若要检测某文件夹变化以执行相应程序或代码,可使用System.IO.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; //启动监控 


 设置好检测路径,开启检测后,会在文件夹发生新增/修改/删除时出发相应事件,以操作其他程序或代码。
 

在使用该类时,也遇到过一些问题,如:

1. 当检测到新建时,不能判断是文件新建还是文件夹新建;

    后来用的 If File.Exists(e.FullName) then .. 表示新建的是文件

2. 新建文件后,将文件拷贝至另外的文件夹,由于是ftp传输,文件尚没有传输完毕,故Copy会报错,后来用了俩个方案一起:

    1. System.Threading.Thread.Sleep(100) 使系统等待100ms,不至于那么快…

    2. 使用While循环,不断的拷贝文件,直到拷贝成功为止;(需设置重复次数 or 时间)

3. 部署至服务器上后,Winform启动的时候直接报错

    纠结了很久,后来才发现,由于filesystemwatcher在Winform界面设置的path为D:\AOI1,是我做测试时的一个本地路径,服务器上没有;故,即使在Winform Load时修改fsw.path也是来不及了;后来干脆在Winform界面直接填写path为C:\,设置EnableRaisingEvents为False;在Load Winform时,设置path,再修改EnableRaisingEvents属性为true


----Jump
2014/02/18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值