[請益] 如何監控某個資料夾內檔案是否變動

看板Soft_Job作者 (花生)時間10年前 (2013/09/03 18:10), 編輯推噓7(707)
留言14則, 10人參與, 最新討論串1/2 (看更多)
因工作上需要,要寫個程式,指定某個資料夾後, 便能監看資料夾(包含子資料夾)裡所有檔案,如果有發生新增、刪除、重新命名、重新被 寫入,就列出來。 方法1: 參考:http://www.openfoundry.org/tw/tech-column/8109--integrit- 一開始先走訪整個資料夾(包含子資料等),將走訪完的資料結構存成資料檔1。再把資料 檔1做hash,產生一個key1 途中某個檔案有變動 20秒後再重新走訪整個資料夾,存成資料檔2,再把資料檔2做hash,產生key2。 把key1比對key2。如有不同,表示在20秒內有檔案變動。比較資料檔1跟資料檔2,看哪裡 不一樣,再列出來。 缺點:這樣好像很慢,走訪整個C糟,執行到一半就爆了(stack overflow?)。產生出來的 資料檔一定很大。更何況資料檔1跟資料檔2還要比較。 方法2: 參考.Net Framework 的函數(FileSystemWatcher 類別): http://msdn.microsoft.com/zh-tw/library/System.IO.FileSystemWatcher.aspx 使用方式:http://www.dotblogs.com.tw/jaigi/archive/2012/10/03/75258.aspx 簡單來說就是設定好指定的資料夾,當資料夾裡面的檔案有變動,就會自動存到他的資 料結構裡,我們再列出來即可。 優點:很快 缺點:他怎麼做的?? 請問 我在網路上看到一個程式:Directory Monitor 中文簡介:http://briian.com/?p=8240 官網下載處:http://www.deventerprise.net/DirectoryMonitor 在官網下載處最下面系統需求要「.NET Framework 4.0」 是表示,這個程式是使用了.net framework 4.0的函數嗎?也就是說他可能使用了方法2 的FileSystemWatcher 類別 所以才這麼快。 因為自己在新人訓練期,被要求寫這個程式,再報告複雜度。 所以需要自己實作。想請教這裡各位大大,怎麼最佳化? 方法1,每隔一段時間對資料夾做快照(snapshot)再比較。但是要怎麼加速? 方法2,好像是監控作業系統,當有檔案變動的事件(event)發生,再記錄。感覺這個比較合理,不浪 費時間做snapshot,但是他是怎麼做的呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.161.28 ※ 編輯: peanut97 來自: 60.248.161.28 (09/03 18:11)

09/03 18:38, , 1F
我對windows不熟,但有辦法捕捉硬碟發生IO時的訊號嗎
09/03 18:38, 1F

09/03 18:39, , 2F
或者是File System有發生變動時,OS那邊應該會知道吧
09/03 18:39, 2F

09/03 18:52, , 3F
跟 .NET 不熟,不過試試看這個? http://bit.ly/15oQczR
09/03 18:52, 3F

09/03 20:15, , 4F
幫補推&縮網址 →QQ29:http://goo.gl/0WX4AB
09/03 20:15, 4F

09/03 20:48, , 5F
可以參考Sys. ProcMon的作法 http://goo.gl/dmIQkN
09/03 20:48, 5F

09/03 22:39, , 6F
很謝謝大家幫忙提供解法 原本有點怕被罵工作要自己做等等
09/03 22:39, 6F

09/03 22:40, , 7F
大家講的都好酷 我來好好研究看看!!
09/03 22:40, 7F

09/03 23:24, , 8F
Qt也有FileSystemWatcher之類的東西
09/03 23:24, 8F

09/04 01:20, , 9F
如果是linux 有inotify()可以用
09/04 01:20, 9F

09/04 01:23, , 10F
kernel要是2.6.x以上
09/04 01:23, 10F

09/04 06:06, , 11F
微軟有提供範例(FileSystemWatcher)
09/04 06:06, 11F

09/05 19:59, , 13F
你跟光要答案的不同 你自己心裡明白XD 這就是差異
09/05 19:59, 13F

09/07 01:00, , 14F
這方法已經有人拿來做產品了
09/07 01:00, 14F
文章代碼(AID): #1I9RM9tr (Soft_Job)
文章代碼(AID): #1I9RM9tr (Soft_Job)