C++:对空文件使用.eof

4
让我们看一下这个程序:
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);

@uberwulu:“……它读取EOF字符。” - 什么是EOF字符? shells / 命令提示符使用一个字符来允许键盘上的用户表示文件结束,但在我所知道的每个现代操作系统中,文件实际上并不嵌入EOF字符……当没有可读内容时,EOF是设置的状态。 - Tony Delroy
3个回答

5

eof()函数在程序试图读取超过文件结尾时返回"true"。

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


4

eof()函数用于检测C++流对象上的“文件结束”标志是否已设置。当读操作遇到底层设备(文件、标准输入、管道等)的输入结尾时,该标志被设置。在尝试读取空文件之前,该标志未被设置。您必须执行一个操作来尝试读取一些内容,然后该标志才会在流对象上设置。


3

当尝试读取流并到达末尾时,标志std::ios_base :: eofbit会被设置。直到尝试读取超过流的末尾,此标志才会被设置。

一般来说,使用std::ios_base :: eofbit相对较少。唯一合理的用途是在读取失败后抑制错误:如果由于已到达文件末尾而导致读取失败,则通常不会出现错误。试图将此标志用于其他任何事情都不起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接