У меня есть этот простой код, который должен получить кусок большого файла журнала, который записывается в. В какой-то момент он сохраняет текущее местоположение, возвращенное из streampos start = istream :: tellg(); способ. Позже код должен прочитать из потока буфер от начала до конца. Код примерно так:Использование fstream 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 и поток имеет установленный флаг ВФ. Должен ли конечный указатель точно указать, где заканчивается поток, и метод read() возвращает точный объем данных? Это нормально, я могу обойти его, проверив флаг eof. Однако может ли кто-нибудь дать объяснение этому эффекту?
Спасибо.
читать() не гарантирует, что размер вы дадите. – 2010-01-14 20:05:55
В понимании этого. Вопрос в том, почему read() читает меньше (end-start) и достигает конца потока? – ilya1725
это простой массив символов. – ilya1725