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