2011-01-31 130 views
0

我正在處理一個項目,該項目將要求應用程序監視用戶爲更改指定的目錄列表。另外,我希望爲用戶提供將應用程序作爲服務運行或單獨運行的選項。由於用戶可以選擇單獨運行,所以我不認爲通過添加或刪除文件(如果存在此類事件)來觸發某些操作系統事件就足夠了。我考慮過爲最深的文件夾計算一個校驗和,然後建立起來。然後,我可以在後續掃描中比較這些校驗和,以嘗試確定發生更改的位置。這會是一個合適的解決方案嗎?如果不是,以有效的方式做這件事的最佳方式是什麼?監視文件夾的更改

另外,我不太清楚該如何標記,因此如果您有任何建議讓我知道,我會盡我所能。

編輯:我需要這個方法在Windows,OS X的工作,最好的Linux

回答

1

存在用於跟蹤變化的幾種方法。

最簡單的方法是掃描定時器上的目錄並比較時間戳和文件大小。然而,這是耗費資源的,並且可能會丟失一些更改(例如,如果文件在兩次檢查之間改變了兩次,第一次更改將被忽略)。

接下來,可以使用FindFirstChangeNotification Windows API函數(但它有自己的侷限性)。

最複雜和最可靠的方法是使用文件系統過濾器驅動程序。在Windows上,我們可以使用CallbackFilter。在MacOS X上,可以創建一個篩選器驅動程序,但我不知道任何類似於CallbackFilter的隨時可用的產品。在Linux上,可以使用inotify

0

man kqueue

(至少,這就是我怎麼會做我最經常有針對性的操作系統 - 但是你應該在您的文章中指定此)

2

在Mac OSX上,您可以使用FSEvent,它類似於Linux上的inotify接口。