工作上需要,要寫個程式,指定某個資料夾後, 便能監看資料夾(包含子資料夾)裡所有檔案,如果有發生新增、刪除、重新命名、重新被 寫入,就列出來。
解決辦法:.Net Framework
- 參考.Net Framework 的函數(FileSystemWatcher 類別):
- 參考JNotify Library
- 參考Commons IO的類別FileAlterationObserver, FilterAlterationMonitor and FileAlterationListenerAdaptor
- 參考Commons vfs2的DefaultFileMonitor類別
- Java 7(jdk 7 up)
Qt
- FileSystemWatcher類別
- inotify()
Windows 本身有提供相關的 API
你可查詢 FindFirstChangeNotification 這個 API
可註冊指定的檔案或目錄,當檔名、檔案屬性、大小、安全性等有變動時
會以 signaled event 的方式通知
所以簡單的做法就是撰寫一個獨立的 thread
在這個 thread 首先呼叫 FindFirstChangeNotification 註冊你想監控的檔案或目錄
此 API 會回傳一個 handle
然後再呼叫 WaitForSingleObject 並帶入這個 handle
之後只要監控的檔案或目錄一有變動時,這個 handle 便會被 signaled
然後 WaitForSingleObject 同時也會結束返回thread
最後再通知你的主程序該檔案已變動以做後續處理
或是直接在此 thread 中做檔案變動後的處理也行
沒有留言:
張貼留言