2011-12-15 81 views
1

我需要監視任何文件操作(添加/刪除/重命名)的文件夾及其子目錄。我已經閱讀了FileSystemWatcher,但是我想要監視每次運行程序或用戶按下「檢查更改」按鈕(FSW似乎更多地針對運行時檢測)之間的更改。我的第一個想法是迭代所有(子)目錄並散列每個文件。然後,連接所有散列(已經排序)並將其散列。當我想檢查更改時,我重複該過程並檢查哈希是否相同。檢測目錄中的更改

這是一個有效的方法嗎? 此外,一旦我檢測到更改,我如何才能找出哪些文件已儘快添加,刪除或重命名?

作爲一個方面說明,我不介意使用腳本,如果他們只要更快的腳本不需要最終用戶安裝任何軟件和腳本可以通知我的C#的變化的應用程序做到這一點。

+0

我很困惑你正在做什麼,以及FileSystemWatchner沒有做的事情,你需要做什麼。 – kenny 2011-12-15 01:18:21

回答

2

我們通過將所有找到的文件及其上次修改時間一起存儲在數據庫中來處理此問題。

每次通過的文件,我們檢查數據庫中的每個文件:如果沒有在數據庫中存在,它是新的,如果它確實存在,但時間戳不同的是,它已經改變了。

還有通過標記的所有文件作爲ToBeDeleteed通之前的數據庫,並清除該文件是否已經發現處理文件刪除的選項。然後,在流程結束時,我們可以刪除標記爲ToBeDeleted的所有記錄。

2

顯然,你需要做的目錄樹的「快照」,並根據需要對它們進行比較。快照的具體內容取決於您的要求。請記住:

  • 您需要存儲的文件名,以檢測「新」和「刪除」的文件
  • 文件大小和最後修改時間是一個很好的和廉價的指標,一個文件有或有沒有改變,但不提供擔保
  • 哈希文件的內容可以是非常昂貴的,如果文件可能會很大,但它的唯一的方式知道他們已經準確的近乎完美的程度,變更(請記住,散列發生碰撞一樣,所以,如果你想這不會是不夠好或者數學100%確定)