在我使用 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()
编辑。大概够用了
stream->clear();
关于c++ - 重用 std::fstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19209156/