Использование fstream tellg для чтения части потока до конца - PullRequest
1 голос
/ 14 января 2010

У меня есть этот простой код, который должен получить кусок большого файла журнала, в который записывается. В какой-то момент он сохраняет текущее местоположение, возвращенное из 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. Однако кто-нибудь может дать объяснение этому эффекту?

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 января 2010

Вы, кажется, звоните gcount на stream_loc вместо my_stream.

0 голосов
/ 22 января 2010
...