2011-12-27 79 views
0

我想將所有文件的所有版本存儲在磁盤上。問題是我不想製作整個磁盤的副本。相反,我想通知一個文件即將更改,以便我可以創建一個副本。這將允許不更改的文件不會浪費磁盤空間。有什麼辦法可以實現這個嗎?如何在寫入之前獲得更改文件的通知?

+0

目前還不清楚你的問題中「我」是什麼。你正在寫一個文件系統過濾器驅動程序?塊設備驅動程序?一個應用程序?或者是什麼? – 2011-12-27 03:29:31

+0

@DavidSchwartz:一個人,那個 – Mehrdad 2011-12-27 03:31:49

+0

@Mehrdad我懷疑他是什麼意思。我不認爲他想要親自通知每個寫作。如果這就是他的意思,那麼有答案,但他們會與下面的很不一樣。 (他們將涉及使用內核調試器和斷點。) – 2011-12-27 03:34:41

回答

1

我相信你所問的是不可能的。一旦頁面被映射到內存中並且變髒,後續寫入的內容不會以任何方式跟蹤。如果您更詳細地解釋你的外在問題是什麼,可能有(也就是說,多次寫入可以被壓縮成單個寫沒有事實,即這些寫入是有史以來被看着一個映射文件。)

解決方案。您可以使用文件系統過濾器驅動程序來完成此操作,但是由於您必須禁止或限制文件的內存映射,所以會有相當痛苦的性能損失。

在你的問題中也存在一個固有的模糊性。如果我這樣做:

for(int i=0; i<100; i++) *(WritableFileMapping)=i; 

那是100把?你想通知100次嗎?

+0

我想在寫入磁盤之前收到通知。這使我可以在寫入到磁盤之前自己打開文件進行復制。 – chacham15 2011-12-27 04:11:03

+0

我想你是指寫入文件系統,而不是寫入磁盤。如果您在寫入磁盤時收到通知,您如何知道要複製哪個文件?如果你問了一個更精確的問題,這真的會容易得多。你想寫一個應用程序嗎?一個司機?你外在的問題是什麼? (這聽起來像你想寫一個文件系統過濾器驅動程序,這是一個重大項目。) – 2011-12-27 04:17:37

+0

外部項目正如我所說。該程序是一個備份程序,可將所有文件的所有版本存儲在磁盤上。即當一個文件改變時,它存儲以前的版本和新的版本。該計劃將始終作爲服務運行。 – chacham15 2011-12-27 04:22:15

0

不容易。它可以完成,但不能從用戶模式應用程序完成,您需要創建內核模式文件系統驅動程序或過濾器來攔截IO操作並阻止,直到文件被複制。

相關問題