2012-08-31 19 views
3

我有一個文件夾包含子文件夾和文件的層次結構。C#:定期檢查文件夾中的更改嗎?

我需要定期檢查是否有任何文件/文件夾已被修改/刪除/添加。

我想從頭開始開發了一種算法,的:

  1. 保存在一個嵌入式數據庫(如SQLite的)或文件的樹狀整體的表示。
  2. 將每個文件的校驗和保存到同一個數據庫中。
  3. 在下次調用時,將此數據庫與實際的文件系統進行比較。
  4. 用發現已更改的內容更新數據庫的信息。從第3步
  5. 重複

,而我的程序不運行,可以關閉/隨時打開的變化可能會發生。
例如,用戶可能會在星期一關閉該程序,星期二編輯文件,並在星期三重新打開該程序。我需要檢查在此期間發生了什麼變化,所以我不能使用FileSystemWatcher

在我重新發明輪子之前,是否已經有一些庫這樣做?

注:

  • 我沒有訪問任何VCS二進制像gitsvn
  • 語言是C#,但我準備好移植任何小型Java庫。
  • 這是for an open source software,所以它需要是一個開源庫。
  • 這是一個嵌入到桌面小部件,所以越輕越好。
+0

如果您不熟悉FileSystemWatcher類,請查看http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx。 – Inisheer

+0

@JTA:對不起,我應該清楚一點:我不能依賴我的程序一直在運行。當我的程序關閉時,這些文件可能會改變。所以看來我無法使用FileSystemWatcher。 –

回答

2

如果你不能使用FileSystemWatcher(我討厭它,它是框架IMO中最耀眼的類),你唯一的選擇是手動跟蹤文件。您將需要存儲文件名和文件內容的散列,以檢查文件是否被添加/刪除或更改。我會用一個數據庫來存儲這個數據,可以是SQLExpress或者SQLite,它有一個C#包裝器。

你的程序會檢查啓動/停止的文件,然後我會使用定時器運行時定期檢查文件。

編輯:從OP的澄清,我不知道任何圖書館,這是開箱即用。但是,自行實施將是微不足道的。帶有一個表格的小型數據庫,以及控制檯應用程序或Windows服務中的計時器控件將完全符合您的需求。

+0

+1你剛纔描述了我的需要。我的問題是:是否已經有一個圖書館可以做到這一點?這似乎是一個相當普遍的任務,可以在不同的項目中重複使用。我寧願不重新發明輪子。你的回答似乎表明,現在沒有這樣的圖書館,我應該實施自己的圖書館? –

+0

我開始實施我自己的(與SQLite),作爲我的軟件的一部分。開源,隨時重用:https://github.com/nicolas-raoul/CmisSync –

+0

非常酷,我總是驚訝於有多少人使用過我的一些開源軟件。 – Justin

2

您可能可以使用FileSystemWatcher(本機.NET類)來實現您的目的。

+1

對不起,我應該更清楚:我不能依賴我的程序一直運行。當我的程序關閉時,這些文件可能會改變。所以看來我無法使用FileSystemWatcher。 –

2

您正在尋找FileSystemWatcher

偵聽文件系統更改通知,並引發事件時 目錄,或目錄中的文件,更改。

+0

對不起,我應該更清楚:我不能依賴我的程序一直運行。當我的程序關閉時,這些文件可能會改變。所以看來我無法使用FileSystemWatcher。 –