[請益] 如何監控某個資料夾內檔案是否變動
因工作上需要,要寫個程式,指定某個資料夾後,
便能監看資料夾(包含子資料夾)裡所有檔案,如果有發生新增、刪除、重新命名、重新被
寫入,就列出來。
方法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
09/03 18:38, 1F
→
09/03 18:39, , 2F
09/03 18:39, 2F
→
09/03 18:52, , 3F
09/03 18:52, 3F
推
09/03 20:15, , 4F
09/03 20:15, 4F
推
09/03 20:48, , 5F
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
09/03 23:24, 8F
推
09/04 01:20, , 9F
09/04 01:20, 9F
推
09/04 01:23, , 10F
09/04 01:23, 10F
推
09/04 06:06, , 11F
09/04 06:06, 11F
→
09/04 06:06, , 12F
09/04 06:06, 12F
→
09/05 19:59, , 13F
09/05 19:59, 13F
推
09/07 01:00, , 14F
09/07 01:00, 14F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):