3
 std::fstream fin("emptyFile", std::fstream::in);
 std::cout << fin.eof() << std::endl;

这打印0。所以使用eof函数我无法检查文件是否为空。或者在读取一些数据后,我需要检查其中是否没有更多数据。

4

2 回答 2

3

有两种方法可以检查您是否“可以从文件中读取某些内容”:

  1. 尝试阅读它,如果它失败了,那就不行了......(例如fin >> var;
  2. 检查文件的大小,使用fin.seekg(0, ios_base::end);后跟size_t len = fin.tellg();(然后回到开头fin.seekg(0, ios_base::beg);

但是,如果您尝试从文本文件中读取整数,则第二种方法可能不起作用 - 文件可能有 2MB 长,并且仍然不包含单个整数值,因为它全是空格和换行符等。

请注意,它会fin.eof()告诉您是否尝试读取文件末尾之外的内容。

于 2013-07-25T17:53:14.520 回答
1

eof()给你错误的结果,因为eofbit还没有设置。如果你读到一些东西,你将通过文件的结尾并被eofbit设置。

避免eof()并使用以下内容:

std::streampos current = fin.tellg();
fin.seekg (0, fin.end);
bool empty = !fin.tellg(); // true if empty file
fin.seekg (current, fin.beg); //restore stream position
于 2013-07-25T17:52:17.003 回答