【问题标题】:Reading and writing to files simultaneously?同时读取和写入文件?
【发布时间】:2010-05-09 09:01:43
【问题描述】:

把问题移到这里。假设,我想存储 1,000,000,000 个整数并且无法使用我的内存。我会使用一个文件(它可以轻松处理这么多数据)。 我怎样才能让它同时读取和写入。 首先,使用 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 ? 但内容保持不变。请解释。 谢谢。

【问题讨论】:

  • 有趣的问题。当我在file &lt;&lt; '0'; 之前和之后放置file.tellg(); file.tellp(); 时,我确实得到了101010(在调试输出中意外发现)。这表明程序中有一些未定义的行为? fstream 实现中的错误?

标签: c++ file file-io


【解决方案1】:

文件流维护两个指针,一个用于读取,一个用于写入。如果您正在执行读/写操作,则需要使用seegseekp 成员函数显式设置这些指针。您还会发现执行格式化 I/O 可能会干扰您尝试执行的操作,因此您应该改用 get/putread/write 成员函数。

另请参阅Why can't I read and append with std::fstream on Mac OS X?,了解有关使用 fstream 的开放模式的更多信息。

【讨论】:

    【解决方案2】:

    两种可能更有效的解决方案:(i) 使用 64 位操作系统或 (ii) 使用 mmap

    % man mmap

    【讨论】:

      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2017-06-22
      • 2013-01-06
      相关资源
      最近更新 更多