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:
- Try to read it, and if it fails, it wasn't OK... (e.g
fin >> var;
) - Check the size of the file, using
fin.seekg(0, ios_base::end);
followed bysize_t len = fin.tellg();
(and then move back to the beginning withfin.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
Author by
Ashot
Updated on June 04, 2022Comments
-
Ashot almost 2 years
std::fstream fin("emptyFile", std::fstream::in); std::cout << fin.eof() << std::endl;
This prints
0
. So usingeof
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.