После того, как я прочитал до конца std::fstream
используя метод read
я не могу seekg
начало (tellg
возвращает -1). Есть ли способ повторно использовать std::fstream
без закрытия и повторного открытия?
if (!stream->is_open();)
{
throw "stream is closed";
}
stream->seekg(0, stream->end);
std::fstream::pos_type lenght = stream->tellg();
stream->seekg(0, stream->beg);
if (0 != stream->tellg())
{
throw "could not set seek to beginig";
}
char* buffer = new char[lenght];
stream->read(buffer, lenght);
*data = buffer;
return lenght;
1-й прогон возвращается в порядке. 2-й ход бросает (не может искать).
Как только поток std::ios_base::failbit
в режим отказа (т. std::ios_base::failbit
), он ничего не будет полезен, пока этот флаг не станет clear()
ed. Вероятно, достаточно использовать
stream->clear();