У меня есть этот простой код, который должен получить кусок большого файла журнала, в который записывается. В какой-то момент он сохраняет текущее местоположение, возвращенное из
streampos start = istream :: tellg ();
метод.
Позже код должен прочитать из потока буфер от начала до конца. Код примерно такой:
streampos start = my_stream.tellg();
... // do some stuff with logging
streampos end = my_stream.tellg();
const streamsize size_to_read = (end - start);
char *buf = new char[size_to_read];
lock (m_logReadLock);
{
my_stream.flush();
my_stream.seekg(start);
my_stream.read(buf, size_to_read);
size_read = my_stream->gcount();
}
unlock (m_logReadLock);
Эффект, который я наблюдаю, заключается в том, что size_read на меньше , чем size_to_read , и для потока установлен флаг eof. Разве указатель конца не должен точно указывать, где заканчивается поток, и метод read () возвращает именно такой объем данных?
Хорошо, я могу обойти это, проверив флаг eof.
Однако кто-нибудь может дать объяснение этому эффекту?
Спасибо.