如何检查文件中是否没有要读取的数据

时间:2013-07-25 17:46:47

标签: c++ file file-io io eof

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

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

2 个答案:

答案 0 :(得分:3)

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

  1. 尝试阅读,如果失败,那就不行了......(例如fin >> var;
  2. 使用fin.seekg(0, ios_base::end);后跟size_t len = fin.tellg();检查文件大小(然后使用fin.seekg(0, ios_base::beg);返回到开头)
  3. 但是,如果您尝试从文本文件中读取整数,则第二种方法可能无效 - 文件长度可能为2MB,并且仍然不包含单个整数值,因为它是所有空格和换行符等

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

答案 1 :(得分: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