How to check if there isn't data in file to read

10,339

Solution 1

There are two ways to check if you "can read something" from a file:

  1. Try to read it, and if it fails, it wasn't OK... (e.g fin >> var;)
  2. Check the size of the file, using fin.seekg(0, ios_base::end); followed by size_t len = fin.tellg(); (and then move back to the beginning with fin.seekg(0, ios_base::beg);)

However, if you are trying to read an integer from a text-file, the second method may not work - the file could be 2MB long, and still not contain a single integer value, because it's all spaces and newlines, etc.

Note that fin.eof() tells you if there has been an attempt to read BEYOND the end of the file.

Solution 2

eof() gives you the wrong result because eofbit is not set yet. If you read something you will pass the end of the file and eofbit will be set.

Avoid eof() and use the following:

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
Share:
10,339
Ashot
Author by

Ashot

Updated on June 04, 2022

Comments

  • Ashot
    Ashot almost 2 years
     std::fstream fin("emptyFile", std::fstream::in);
     std::cout << fin.eof() << std::endl;
    

    This prints 0. So using eof function I can't check if file is empty. Or after reading some data I need to check if there is no more data in it.