我正在編寫大型檔案文件(見下文)的4GB +,原生&託管C++。設計:大檔案文件編輯器,文件映射
對於訪問文件,我使用文件映射(見下文)像任何理智的人。這對於讀取數據非常有用,但是在實際編輯存檔時會出現問題。 文件映射不允許在文件被訪問時調整文件大小,所以我不知道當用戶想要在文件中插入新數據時該如何繼續(當文件被映射時,這會超過文件的原始大小)。
我應該每次重新映射整個事物嗎?這肯定會很慢。但是,我想讓編輯實時訪問專有文件,因爲這樣可以大大簡化編程,並且不會讓文件在修改時被其他應用程序搞亂。我不想花時間去編輯這個編輯;這只是我正在開發的實際項目的簡單開發工具。
所以我想聽聽你是如何處理類似的情況,以及其他歸檔軟件,尤其是其他遊戲如何解決這個問題?
澄清:
這是不是一個文本文件,我正在寫一個特定的二進制檔案文件格式。我的意思是一個包含許多其他目錄的大文件。自定義歸檔文件在遊戲使用中非常常見,原因很多。以我的格式,我的目標是與Valve Software's GCF format類似(但更簡單)的結構 - 我會盡可能使用GCF格式,但不幸的是沒有格式的編輯器,儘管有很多好的實現來讀取它們,如HLLib。
訪問文件必須快速,因爲它旨在用於存儲遊戲資源。所以這不是一個數據庫。數據庫文件將包含在其中,以及GFX,SFX等文件。
這裏討論的「文件映射」是Windows平臺上的一項特定技術,它允許通過爲其部分創建「視圖」來直接訪問大文件,請參見:http://msdn.microsoft.com/en-us/library/aa366556(VS.85).aspx - 此技術允許最小延遲和內存使用情況,並且是訪問任何大型文件的理由。 所以這是而不是意味着將整個4GB文件讀入內存,這完全相反。
是的,這正是我想我必須做的。另一件事是優化空間開銷的速度:我想第一次爲文件保留一大塊空間,並在關閉文件時將其大小調整爲真正的EOF。 – anon6439 2008-10-13 05:16:54