为什么可以打开`ifstream`进行阅读和写作?

时间:2017-10-25 10:47:14

标签: c++ file-io fstream

我今天看到了一段有趣的代码:

ifstream fil;

fil.open( "ini.txt", std::ios::in | std::ios::out );

我正打算对它的破碎大肆宣传,但令我惊讶的是,我看到cppreference.com显然认为这是正确的:

http://en.cppreference.com/w/cpp/io/basic_ifstream/open

  

模式 - 指定流打开模式。它是位掩码类型,定义了以下常量:

     
      
  • in:open for reading
  •   
  • out:开放写作
  •   

如果我理解的是ifstream是一个INPUT文件流,那么它是如何打开读写的呢?

不一定是fstream而不是ifstream吗?

2 个答案:

答案 0 :(得分:1)

std::ifstream就像是std::basic_filebuf的句柄。您甚至可以通过调用std::basic_ifstream::rdbuf来从句柄访问该缓冲区。

您可以从手柄中窃取该缓冲区,并将其分配给另一个(我不会进入 它已完成)。这是有趣的事情。您可以将该缓冲区从ifstream移动到ofstream。这需要能够打开缓冲区进行写入。因此,您链接的相同参考页面说明了这一点:

  

有效拨打rdbuf()->open(filename, mode | ios_base::in)

这是一个方便的功能,以避免以后操纵缓冲区本身。

答案 1 :(得分:0)

您需要使用fstream

fstream file("input.txt", ios::in | ios::out | ios::app);
int data;

file >> data;
file << data +1;

file.close();