reusing std::fstream

reusing std::fstream

本文关键字:fstream std reusing      更新时间:2023-10-16

使用read方法读取结束std::fstream后,我无法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;

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

一旦流进入故障模式(即设置了std::ios_base::failbit),它将不会执行任何有用的操作,直到此标志被clear() ed。可能就足够了

stream->clear();