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;

第一次运行返回正常。第二次运行抛出(无法寻找)。

4

1 回答 1

2

一旦流进入故障模式(即std::ios_base::failbit设置),它不会做任何有用的事情,直到这个标志被clear()编辑。使用可能就足够了

stream->clear();
于 2013-10-06T13:06:06.163 回答