2012-10-10 70 views
1

我正在嘗試製作備份整個硬盤驅動器的軟件。獲取有關硬盤扇區原始數據更改的通知 - 文件更改通知

我已經設法編寫了讀取硬盤扇區原始數據的代碼。但是,我想要進行增量備份。爲此,我需要知道對操作系統設置所做的更改,文件更改等等。

我的問題是 -

使用FileSystemWatcherInotify,我將能夠知道在硬盤驅動器到每一個部門作出的每個改變? (操作系統設置等)

我使用C++爲linux和windows編碼。

(SAW上Stackoverflow這個問題,這給了我一些想法)

+1

您確定要備份*每個部門*嗎?即使刪除文件?即使空間從磁盤初始化(與一個文件系統)永遠不會分配?如果不是,那麼操作系統修改通知就是要走的路。 – wallyk

+0

你是對的。我不想這樣做。 Thankyou – Nuv

+0

它是特定於操作系統和文件系統的 –

回答

1

inotify的是檢測你的程序運行時,我猜FilySystemWatches是類似的變化。

解決此問題的一種方法是對每個扇區或多個扇區進行校驗和,並且在進行備份時,將校驗和與您擁有的列表進行比較,並且僅對已更改的備份塊進行比較。

0

MS Windows FileSystemWatcher機制比Linux's Inotify更有限,但兩者都可能會做你所需要的。 Linux機制爲文件讀取提供(可選)通知,這會導致「訪問時間戳」被更新。

但是,從應用程序的角度來看,從系統啓動到程序加載(以及卸載到關閉)所做的所有文件修改都將不受監視。您的應用程序可能需要查看許多文件的文件修改時間戳,以確定已更改的文件,具體取決於您定位的監視級別。

當文件上次被訪問時,兩種體系結構都會爲每個文件跟蹤保留一個時間戳。如果更新的內容是備份通知的觸發器,則缺少此類通知的Windows機制將導致平臺上的行爲不匹配。由於緩衝區大小限制,Windows的機制也可能會放棄通知。下面是從documentation一個真正的寶石:

注意,一個FileSystemWatcher的當事件被遺漏或者超出緩衝區大小時,不會引發Error事件,由於與Windows操作系統的依賴。爲了保持從失蹤事件,請遵循以下原則:

  • InternalBufferSize屬性可以防止丟失文件系統更改事件增加緩衝區大小。

  • 避免觀看長文件名的文件。考慮使用較短的名稱進行重命名。

  • 保持您的事件處理代碼儘可能短。

至少你可以控制三分之二的這些....