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,FindNextChangeNotification ,FindCloseChangeNotification,以及相應的Wait Functions(包括 SignalObjectAndWait, WaitForSingleObject, and WaitForSingleObjectEx 以及 WaitForMultipleObjects, WaitForMultipleObjectsEx, MsgWaitForMultipleObjects, and MsgWaitForMultipleObjectsEx )來實現和fileSystemWatcher同樣的功能,具體使用方法請參閱MSDN
在一些涉及到文件處理的程序中如果也能加上這種關聯功能,則給用戶的印象就比較深,而且更容易為用戶所接受