#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream file("out.txt", ios_base::app);
file.seekg(0, ios_base::beg);
char buffer[100];
if( !file.getline(buffer, 99) )
cout << "file.failbit " << boolalpha << file.fail() << " file.eofbit " << file.eof()
<< '\n'
<< "file.badbit " << file.bad() << " file.goodbit " << file.good() << '\n';
}
输出
答案 0 :(得分:2)
该标准禁止您从仅为输出打开的文件中读取。来自basic_filebuf
的第27.9.1.1.3段(fstream
的基本实施的一部分):
如果文件没有打开读取,则无法读取输入序列。
因此,当试图从仅为写入打开的文件中读取时,人们会期望看到failbit
。该标准还说,只要eofbit
到达输入序列的末尾,就会设置getline
。由于您实际上有一个空的输入序列(即,您无法读取的文件),因此第一次调用getline也会设置eofbit
。在标准中,基础流缓冲区下溢。 basic_streambuf::underflow()
在失败时返回traits::eof()
(参见27.6.3.4.3第7-17段)。
要解决此问题,请将ios_base::in
添加到文件的openmode。