我今天看到了一段有趣的代码:
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
吗?
答案 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();