How to monitor the File system?
Ultraedit,相信大部分開(kāi)發(fā)人員都比較熟悉吧?各位在實(shí)用的過(guò)程中有沒(méi)有注意到ultraedit較強(qiáng)的關(guān)聯(lián)性呢?比如說(shuō),ultraedit已經(jīng)打開(kāi)了a.txt文件,此時(shí)在另外一個(gè)程序中對(duì)a.txt做了更改,ultraedit就能馬上提示a.txt已被其他應(yīng)用程序改變,提示用戶是否需要重新載入。相信使用過(guò)ultraedit的人對(duì)這個(gè)印象比較深。這個(gè)功能是怎么實(shí)現(xiàn)的呢?在這里筆者略述一二。
要實(shí)現(xiàn)這樣的功能,其實(shí)很簡(jiǎn)單,無(wú)怪乎調(diào)用系統(tǒng)函數(shù),查看文件狀態(tài),比較文件更改時(shí)間等等,但總不至于用一線程一直讀取文件狀態(tài)吧?其實(shí)可以使用文件系統(tǒng)的事件通知機(jī)制來(lái)實(shí)現(xiàn)。
(1)對(duì)于dotnet應(yīng)用來(lái)說(shuō),可以通過(guò)使用fileSystemWatcher組件來(lái)實(shí)現(xiàn),只需要設(shè)置Path,F(xiàn)ilter等屬性,實(shí)現(xiàn)Changed,Created,deleted,renamed等事件即可。注意,Path指要監(jiān)控的文件目錄,F(xiàn)ilter指文件類型,在這里可以使用通配符,比如*.*等等
(2)對(duì)于非dotnet應(yīng)用,可以使用系統(tǒng)的文件操作,通過(guò)FindFirstChangeNotification,FindNextChangeNotification ,FindCloseChangeNotification,以及相應(yīng)的Wait Functions(包括 SignalObjectAndWait, WaitForSingleObject, and WaitForSingleObjectEx 以及 WaitForMultipleObjects, WaitForMultipleObjectsEx, MsgWaitForMultipleObjects, and MsgWaitForMultipleObjectsEx )來(lái)實(shí)現(xiàn)和fileSystemWatcher同樣的功能,具體使用方法請(qǐng)參閱MSDN
在一些涉及到文件處理的程序中如果也能加上這種關(guān)聯(lián)功能,則給用戶的印象就比較深,而且更容易為用戶所接受
posted on 2008-12-30 14:37 猶志 閱讀(333) 評(píng)論(0) 編輯 收藏 引用