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

c++, eof, file, file-io, io

Solution

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 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.

Problem

``` 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.

Original source