c++ - 重用 std::fstream

标签 c++ c++11 stream

在我使用 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/

相关文章:

c++ - 如何在 C 中获取 char 数组的前 x 个元素? boost-libraries 有改进的方法吗?

c++ - QThread 和 QTimer

c++ - 在 C++ 中将函数作为参数执行

Java 11 根据枚举值选择一种方法应用于流

c++ - 如何将带有 vector 或其他标准库容器的对象保存到 C++ 中的二进制文件?

c++ - 无法理解 C++ 中的 istringstream

c++ - 非 MFC ATL 项目 (dll) 产生 MFC 相关错误

c++ - 将 vector <std::string> 转换为 vector <double>

c++ - 为什么不能简单初始化(带大括号)2D std::array?

c# - 如何在 .Net MVC 中将文件从磁盘流式传输到客户端浏览器