c++ - 写入数据时 std::ofstream 中的错误处理

标签 c++ ofstream

我有一个小程序,我在其中初始化一个字符串并写入一个文件流:

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
  std::ofstream ofs(file.c_str());
  string s="Hello how are you";
  if(ofs)
     ofs<<s;
  if(!ofs)
  {
       cout<<"Writing to file failed"<<endl;
  }
  return 0;
 }

我的磁盘空间非常少,语句“ofs<”失败了。所以我知道这是逻辑上的错误。

语句"if(!ofs)"没有遇到上述问题,因此我无法知道它失败的原因。

请告诉我,通过哪些其他选项我可以知道 "ofs< 失败了。

提前致谢。

最佳答案

原则上,如果出现写入错误,应该设置badbit。这 错误只会在流实际尝试写入时设置,但是, 所以由于缓冲,它可能会在比错误发生时更晚的写入时设置,甚至在发生错误之后 关。而且这个位是“粘性的”,所以一旦设置,它就会留下来 设置。

鉴于上述情况,通常的程序是验证状态 关闭后输出;当输出到 std::coutstd::cerr 时,之后 最后的冲洗。像这样的东西:

std::ofstream f(...);
//  all sorts of output (usually to the `std::ostream&` in a
//  function).
f.close();
if ( ! f ) {
    //  Error handling.  Most important, do _not_ return 0 from
    //  main, but EXIT_FAILUREl.
}

输出到std::cout时,将f.close()替换为 std::cout.flush()(当然还有 if (!std::cout))。

AND:这是标准程序。返回代码为 0 的程序 (或EXIT_SUCCESS)时出现写入错误不正确。

关于c++ - 写入数据时 std::ofstream 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28342660/

相关文章:

c++ - 这是删除和删除指向存储在 vector 中的对象的指针的正确方法吗?

c++ - 带负值的 Unsigned long

c++ - 如何更改可变文件名的文件路径?

c++ - 文件流、STL 容器和可变长度数组

c++ - 什么时候使用内部运算符,什么时候使用外部运算符

c++ - 枚举结构和枚举类有什么区别?

c++ - 如果必须将对象对齐为特定类型,则计算对象的大小

c++ - 当程序使用 sudo 运行时,ofstream 无法创建文件

c++ - 删除元素后列表的最后一个元素损坏

C++ ofstream输出到图像文件在Windows上写入不同的数据