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

时间:2015-02-05 11:23:11

标签: 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;
 }

我的磁盘空间非常少,声明&#34; ofs&lt; &#34;失败。所以我知道这在逻辑上是错误的。

声明&#34; if(!ofs)&#34; 没有遇到上述问题,因此我无法知道原因它失败了。

请告诉我,通过哪些其他选项我可以知道&#34; ofs&lt; 已失败。

提前致谢。

2 个答案:

答案 0 :(得分:16)

原则上,如果存在写入错误,则应设置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)当写入错误不正确时。

答案 1 :(得分:5)

我找到了像

这样的解决方案
#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.bad())    //bad() function will check for badbit
  {
       cout<<"Writing to file failed"<<endl;
  }
  return 0;
 }

您还可以参考以下链接herethere来检查是否正确。