c ++ - повторное использование std :: fstream

0

После того, как я прочитал до конца 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-й ход бросает (не может искать).

Теги:
c++11
stream

1 ответ

2
Лучший ответ

Как только поток std::ios_base::failbit в режим отказа (т. std::ios_base::failbit), он ничего не будет полезен, пока этот флаг не станет clear() ed. Вероятно, достаточно использовать

stream->clear();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню