2010-05-09 182 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的开放模式的更多信息。