2010-02-01 72 views
0

我有一個非常大的文件,我需要解析,因此將其讀入內存中的所有一次是不理想的。文件結構的方式,如果我可以從eof開始並開始,那將會容易得多。有沒有人有這樣做的好方法?我正在使用Visual Studio 2008和C++。由於C++讀取文件頂部

+0

此文件是否有固定長度記錄?如果是這樣,考慮隨機訪問。 – 2010-02-01 16:43:53

+0

@Liz - 遺憾的是沒有 – Steve 2010-02-01 16:50:04

+0

在這種情況下,你必須讀取來自EOF [一定數量的字節],然後分析要多閱讀。你最終會使用seek/tell/get的組合,這可能會很慢。我不知道這是否會比在整個文件中讀取更好或更差。你考慮過內存映射文件嗎? – 2010-02-01 17:04:08

回答

7

如果您的操作系統支持的話,可以考慮使用內存映射文件。然後,您可以將文件內容視爲非常大的字節數組,操作系統會根據需要管理將數據帶入內存(並釋放它)。

1

這是不可能使每個讀/寫後的位置「減量」,而不是增量。這就是爲什麼你只有EOF,而不是SOF。唯一的方法是在每次讀取或寫入之後調用fseek/seekg()/ seekp()來撤消位置更改,但這會非常緩慢。

1

商店在首位相反的順序文件。

+0

如果只有我可以 – Steve 2010-02-01 18:39:28

0

如果你打算這麼做很多如何創建一個反向BufferedInputStream類 - 你將能夠給這個措施控制文件的每個塊在緩衝區中的大小,並隱藏所有內務管理客戶。

什麼其他人所說的關於每個實際的文件後,我重新定位/ O仍然有效 - 這隻會提高可用性,而不是性能。