我正在嘗試製作備份整個硬盤驅動器的軟件。獲取有關硬盤扇區原始數據更改的通知 - 文件更改通知
我已經設法編寫了讀取硬盤扇區原始數據的代碼。但是,我想要進行增量備份。爲此,我需要知道對操作系統設置所做的更改,文件更改等等。
我的問題是 -
使用FileSystemWatcher和Inotify,我將能夠知道在硬盤驅動器到每一個部門作出的每個改變? (操作系統設置等)
我使用C++爲linux和windows編碼。
(SAW上Stackoverflow這個問題,這給了我一些想法)
我正在嘗試製作備份整個硬盤驅動器的軟件。獲取有關硬盤扇區原始數據更改的通知 - 文件更改通知
我已經設法編寫了讀取硬盤扇區原始數據的代碼。但是,我想要進行增量備份。爲此,我需要知道對操作系統設置所做的更改,文件更改等等。
我的問題是 -
使用FileSystemWatcher和Inotify,我將能夠知道在硬盤驅動器到每一個部門作出的每個改變? (操作系統設置等)
我使用C++爲linux和windows編碼。
(SAW上Stackoverflow這個問題,這給了我一些想法)
inotify的是檢測你的程序運行時,我猜FilySystemWatches是類似的變化。
解決此問題的一種方法是對每個扇區或多個扇區進行校驗和,並且在進行備份時,將校驗和與您擁有的列表進行比較,並且僅對已更改的備份塊進行比較。
MS Windows FileSystemWatcher機制比Linux's Inotify更有限,但兩者都可能會做你所需要的。 Linux機制爲文件讀取提供(可選)通知,這會導致「訪問時間戳」被更新。
但是,從應用程序的角度來看,從系統啓動到程序加載(以及卸載到關閉)所做的所有文件修改都將不受監視。您的應用程序可能需要查看許多文件的文件修改時間戳,以確定已更改的文件,具體取決於您定位的監視級別。
當文件上次被訪問時,兩種體系結構都會爲每個文件跟蹤保留一個時間戳。如果更新的內容是備份通知的觸發器,則缺少此類通知的Windows機制將導致平臺上的行爲不匹配。由於緩衝區大小限制,Windows的機制也可能會放棄通知。下面是從documentation一個真正的寶石:
注意,一個FileSystemWatcher的當事件被遺漏或者超出緩衝區大小時,不會引發Error事件,由於與Windows操作系統的依賴。爲了保持從失蹤事件,請遵循以下原則:
與InternalBufferSize屬性可以防止丟失文件系統更改事件增加緩衝區大小。
避免觀看長文件名的文件。考慮使用較短的名稱進行重命名。
保持您的事件處理代碼儘可能短。
至少你可以控制三分之二的這些....
您確定要備份*每個部門*嗎?即使刪除文件?即使空間從磁盤初始化(與一個文件系統)永遠不會分配?如果不是,那麼操作系統修改通知就是要走的路。 – wallyk
你是對的。我不想這樣做。 Thankyou – Nuv
它是特定於操作系統和文件系統的 –