Имея текстовый файл с несколькими символами (скажем, 10), вы можете попробовать прочитать из него 1000 символов.
char *buf = new char[1000];
ifstream in("in.txt");
in.read(buf, 1000);
Это, конечно же, установит флаг eofbit (и флаг failbit тоже), однако вы сможете получить нужные символы.
Теперь предположим, что вы хотите снова прочитать файл (с самого начала):
in.seekg(0); // Sets input position indicator.
in.read(buf, 100); // Try to read again.
Это не работает: потому что, если вы позвоните:
int count = in.gcount() // Charecters readed from input.
вы заметите, что count == 0
. То есть вообще ничего не читал.
Отсюда вопрос: Как можно перемотать файл после того, как вы дошли до конца файла?