看板 Soft_Job 關於我們 聯絡資訊
因工作上需要,要寫個程式,指定某個資料夾後, 便能監看資料夾(包含子資料夾)裡所有檔案,如果有發生新增、刪除、重新命名、重新被 寫入,就列出來。 方法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)
RouterHsieh:我對windows不熟,但有辦法捕捉硬碟發生IO時的訊號嗎 09/03 18:38
RouterHsieh:或者是File System有發生變動時,OS那邊應該會知道吧 09/03 18:39
twolights:跟 .NET 不熟,不過試試看這個? http://bit.ly/15oQczR 09/03 18:52
Dforce:幫補推&縮網址 →QQ29:http://goo.gl/0WX4AB 09/03 20:15
joyolkreg:可以參考Sys. ProcMon的作法 http://goo.gl/dmIQkN 09/03 20:48
peanut97:很謝謝大家幫忙提供解法 原本有點怕被罵工作要自己做等等 09/03 22:39
peanut97:大家講的都好酷 我來好好研究看看!! 09/03 22:40
dennis2030:Qt也有FileSystemWatcher之類的東西 09/03 23:24
chiel:如果是linux 有inotify()可以用 09/04 01:20
chiel:kernel要是2.6.x以上 09/04 01:23
chucheng:微軟有提供範例(FileSystemWatcher) 09/04 06:06
markov:你跟光要答案的不同 你自己心裡明白XD 這就是差異 09/05 19:59
psliurt:這方法已經有人拿來做產品了 09/07 01:00