How to monitor the File system?

Ultraedit,相信大部分开发人员都比较熟悉吧?各位在实用的过程中有没有注意到ultraedit较强的关联性呢?比如说,ultraedit已经打开了a.txt文件,此时在另外一个程序中对a.txt做了更改,ultraedit就能马上提示a.txt已被其他应用程序改变,提示用户是否需要重新载入。相信使用过ultraedit的人对这个印象比较深。这个功能是怎么实现的呢?在这里笔者略述一二。
要实现这样的功能,其实很简单,无怪乎调用系统函数,查看文件状态,比较文件更改时间等等,但总不至于用一线程一直读取文件状态吧?其实可以使用文件系统的事件通知机制来实现。
(1)对于dotnet应用来说,可以通过使用fileSystemWatcher组件来实现,只需要设置Path,Filter等属性,实现Changed,Created,deleted,renamed等事件即可。注意,Path指要监控的文件目录,Filter指文件类型,在这里可以使用通配符,比如*.*等等
(2)对于非dotnet应用,可以使用系统的文件操作,通过FindFirstChangeNotification,FindNextChangeNotificationFindCloseChangeNotification,以及相应的Wait Functions(包括 SignalObjectAndWait, WaitForSingleObject, and WaitForSingleObjectEx 以及 WaitForMultipleObjects, WaitForMultipleObjectsEx, MsgWaitForMultipleObjects, and MsgWaitForMultipleObjectsEx )来实现和fileSystemWatcher同样的功能,具体使用方法请参阅MSDN
在一些涉及到文件处理的程序中如果也能加上这种关联功能,则给用户的印象就比较深,而且更容易为用户所接受

posted on 2008-12-30 14:37 犹志 阅读(326) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜