2010-05-09 187 views
4

在此處移動問題。假設,我想存儲10億個整數,並且不能使用我的記憶。我會使用一個文件(它可以很容易地處理這麼多的數據)。 我如何讓它讀取和寫入,並在同一時間。 使用fstream file("file.txt', ios::out | ios::in);首先不會創建文件。但假設文件存在,我無法同時進行讀寫。 我的意思是這樣的: 讓文件的內容是111111 然後,如果我運行: -同時讀取和寫入文件?

#include <fstream> 
#include <iostream> 
using namespace std; 
int main() 
{ 
    fstream file("file.txt",ios:in|ios::out); 
    char x; 
    while(file>>x) 
    { 
    file<<'0'; 
    } 
return 0; 
} 

不應在文件的內容現在是101010?讀一個字符,然後用0覆蓋下一個字符?或者將整個內容一次讀入某個緩衝區,文件中是否至少有一個0? 1111110? 但內容保持不變。請解釋。 謝謝。

+0

有趣的問題。當我把'file.tellg(); file.tellp();'file <<'0'之前和之後;',我確實得到了'101010'(用調試輸出偶然發現)。這表明程序中存在一些未定義的行爲? fstream實現中的錯誤? – UncleBens 2010-05-09 09:27:36

回答

1

兩種可能更有效的解決方案:(i)使用64位操作系統或(ii)使用mmap

% man mmap

4

的文件流維持兩個指針,讀一個,另一個用於寫入。如果您正在進行讀取/寫入操作,則需要使用seegseekp成員函數明確設置這些指針。您還會發現執行格式化的I/O可能會干擾您嘗試執行的操作,因此您應該使用成員函數get/putread/write

另請參閱Why can't I read and append with std::fstream on Mac OS X?瞭解有關使用fstream的開放模式的更多信息。