搜尋此網誌

2013年9月4日 星期三

【轉載】監控某個資料夾內檔案是否變動

ptt上看到, 也去找了相關的解決辦法。


工作上需要,要寫個程式,指定某個資料夾後, 便能監看資料夾(包含子資料夾)裡所有檔案,如果有發生新增、刪除、重新命名、重新被 寫入,就列出來。

解決辦法:
.Net Framework

Java
C++ (Native Code)


Qt
  • FileSystemWatcher類別
Linux(kernal version 2.6 up)
  • inotify()


作者  tradow

Windows 本身有提供相關的 API
你可查詢 FindFirstChangeNotification 這個 API
可註冊指定的檔案或目錄,當檔名、檔案屬性、大小、安全性等有變動時
會以 signaled event 的方式通知

所以簡單的做法就是撰寫一個獨立的 thread
在這個 thread 首先呼叫 FindFirstChangeNotification 註冊你想監控的檔案或目錄
此 API 會回傳一個 handle
然後再呼叫 WaitForSingleObject 並帶入這個 handle
之後只要監控的檔案或目錄一有變動時,這個 handle 便會被 signaled
然後 WaitForSingleObject 同時也會結束返回thread
最後再通知你的主程序該檔案已變動以做後續處理
 或是直接在此 thread 中做檔案變動後的處理也行

沒有留言: