关于FileSystemWatcher类
2014-02-18 17:07
113 查看
类: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
首次接触到这个类是在这样的一个用户需求中:
当时需要用一个路径导入资料进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
相关文章推荐
- Linux Filesystem: 关于vfsmount的理解
- 关于asm上使用filesystemio_options初始化参数的问题
- 关于.NET中FileSystemWatcher的一些不被人注意的细节
- 关于Browse the filesystem打不开问题
- 关于索引与查询的hash
- 关于初始化
- 关于ORACLE的会话连接超时
- 关于 sizeof() 的一些思考
- 关于谭浩强老先生的《C++程序设计教程》
- 中国男足队员给领导的一封关于【奥运期间私自外出开房行为】的检讨信,作文水平一般但很YY,正好给大家轻松一下。
- 关于用C#编写ActiveX控件4(转)
- 关于ExtJS3.0组件连接http://extjs.com/s.gif的问题
- 关于PIX 525防火墙密码恢复。
- 关于工作流(Workflow Foundation)的一些总结归纳
- JQuery 中几个用法备注令附一个关于操作checkbox的疑问
- 国务院关于职工探亲待遇的规定
- 关于google map API
- pthread_join多线程中关于一个二级指针
- 关于ANDROID_SWT错误的解决
- 自制简单的Java下载器——来自《Java高级编程》的一个关于线程的例子(带上部分注释)