C ++:.eof在空文件上

时间:2012-08-26 21:58:55

标签: c++ fstream eof

让我们看看这个程序:

ifstream filein("hey.txt");


if(filein.eof()){
    cout<<"END"<<endl;
}

这里“hey.txt”是空的。所以这里的if条件应该是真的但是它不是

尽管文件为空,为什么eof不返回true?

如果我在if之前添加了这个,则eof返回true,尽管arr仍然为空并且文件仍为空,因此两者都未更改

char arr[100];
filein.getline(arr,99);

3 个答案:

答案 0 :(得分:5)

  程序尝试读取文件末尾后,

eof()函数返回“true”。

您可以使用std::ifstream::peek()检查“逻辑文件结尾”。

答案 1 :(得分:3)

在尝试阅读时到达流末尾时设置标志std::ios_base::eofbit。在尝试读取流的末尾之前,将不会设置此标志。

一般来说,std::ios_base::eofbit的使用相当有限。唯一合理的用途是在读取失败后抑制错误:如果由于到达文件末尾而导致读取失败通常不会出错。尝试将此标志用于其他任何内容都不起作用。

答案 2 :(得分:3)

eof()测试&#34;文件结尾&#34; flag是在C ++流对象上设置的。当读取操作吸引来自底层设备(文件,标准输入,管道等)的输入结束时,将设置此标志。在尝试读取空文件之前,不会设置标志。您必须执行一个操作,尝试在流对象上设置标志之前读取内容。