Был какой-то поток, который не мог получить длину, вызывая tellg()
.
В случае tellg()
может вернуть -1
.
Вы можете получить длину потока, подготовив буфер достаточного размера.
Я узнал, как получить длину, изучив функцию stream::read
.
const int DATA_SIZE = 1024 * 512;
char buf[DATA_SIZE]; // 1024 * 512 is enough!
std::istream& is = GetSomeStream();
int Len = is.rdbuf()->sgetn(buf, DATA_SIZE);
Выше Len
- реальный размер данных в istream
.