我想將所有文件的所有版本存儲在磁盤上。問題是我不想製作整個磁盤的副本。相反,我想通知一個文件即將更改,以便我可以創建一個副本。這將允許不更改的文件不會浪費磁盤空間。有什麼辦法可以實現這個嗎?如何在寫入之前獲得更改文件的通知?
回答
我相信你所問的是不可能的。一旦頁面被映射到內存中並且變髒,後續寫入的內容不會以任何方式跟蹤。如果您更詳細地解釋你的外在問題是什麼,可能有(也就是說,多次寫入可以被壓縮成單個寫沒有事實,即這些寫入是有史以來被看着一個映射文件。)
解決方案。您可以使用文件系統過濾器驅動程序來完成此操作,但是由於您必須禁止或限制文件的內存映射,所以會有相當痛苦的性能損失。
在你的問題中也存在一個固有的模糊性。如果我這樣做:
for(int i=0; i<100; i++) *(WritableFileMapping)=i;
那是100把?你想通知100次嗎?
我想在寫入磁盤之前收到通知。這使我可以在寫入到磁盤之前自己打開文件進行復制。 – chacham15 2011-12-27 04:11:03
我想你是指寫入文件系統,而不是寫入磁盤。如果您在寫入磁盤時收到通知,您如何知道要複製哪個文件?如果你問了一個更精確的問題,這真的會容易得多。你想寫一個應用程序嗎?一個司機?你外在的問題是什麼? (這聽起來像你想寫一個文件系統過濾器驅動程序,這是一個重大項目。) – 2011-12-27 04:17:37
外部項目正如我所說。該程序是一個備份程序,可將所有文件的所有版本存儲在磁盤上。即當一個文件改變時,它存儲以前的版本和新的版本。該計劃將始終作爲服務運行。 – chacham15 2011-12-27 04:22:15
不容易。它可以完成,但不能從用戶模式應用程序完成,您需要創建內核模式文件系統驅動程序或過濾器來攔截IO操作並阻止,直到文件被複制。
- 1. 刪除文件之前得到通知
- 2. 在導入之前更改mysqldump文件
- 3. fuse:如何在寫入之前獲取要寫入的文件的大小?
- 4. 在寫入.conf之前a2billing更改值
- 5. Android 4.1+:在寫入通話記錄之前更改號碼?
- 6. 如何知道在提交之前哪些文件或文件夾被更改
- 7. 如何獲得有關Android文件系統更新的通知?
- 8. 如何獲得有關任何證書更改的通知
- 9. 如何調試FindFirstChangeNotification獲取的文件更改通知?
- 10. 如何獲取事件或通知輸入法更改?(IOS5.1)
- 11. 如何在將文件寫入服務器之前獲取文件大小?
- 12. 在寫入文件之前和寫入文件之後的差異
- 13. 如何獲得關於更改的通知if_index
- 14. 如何獲得有關SharePoint組更改的通知。
- 15. 如何自動獲得有關IP地址更改的通知
- 16. 在寫入文件之前壓縮XML
- 17. 在刪除之前寫入文件名
- 18. 如何在寫入文件之前整理.Net XmlDocument文本?
- 19. 在寫入數據之前獲取BufferedImage的文件大小
- 20. Android系統區域設置更改時如何獲得通知?
- 21. 在Android中刪除任何文件之前獲取通知的任何API
- 22. 如何在通知之前獲取服務中通知的時間()
- 23. 如何在提交之前查看文件的更改?
- 24. 如何在onClick事件之前更改AlertDialog中的文本
- 25. 如何通過jQuery獲取多文件輸入的更改值?
- 26. 在導入MySQL之前更改.csv文件的編碼
- 27. 在XML文件上通知更改
- 28. 我如何獲得NLog正在寫入的文件的名稱?
- 29. 寫入文件通過更改文件到RTF - awk的
- 30. 在停止程序之前,文件如何寫入?
目前還不清楚你的問題中「我」是什麼。你正在寫一個文件系統過濾器驅動程序?塊設備驅動程序?一個應用程序?或者是什麼? – 2011-12-27 03:29:31
@DavidSchwartz:一個人,那個 – Mehrdad 2011-12-27 03:31:49
@Mehrdad我懷疑他是什麼意思。我不認爲他想要親自通知每個寫作。如果這就是他的意思,那麼有答案,但他們會與下面的很不一樣。 (他們將涉及使用內核調試器和斷點。) – 2011-12-27 03:34:41