Error handling in std::ofstream while writing data

有些话、适合烂在心里 提交于 2019-11-27 03:24:41

问题


I have a small program where i initialize a string and write to a file stream:

#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;
 }

My diskspace is very less, and the statement "ofs<" fails. So I know that this is an error logically.

The statement "if(!ofs)" does not encounter the above issue, hence I am unable to know why it failed.

Please tell me, by which other options I would be able to know that "ofs< has failed.

Thanks in advance.


回答1:


In principle, if there is a write error, badbit should be set. The error will only be set when the stream actually tries to write, however, so because of buffering, it may be set on a later write than when the error occurs, or even after close. And the bit is “sticky”, so once set, it will stay set.

Given the above, the usual procedure is to just verify the status of the output after close; when outputting to std::cout or std::cerr, after the final flush. Something like:

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.
}

When outputting to std::cout, replace the f.close() with std::cout.flush() (and of course, if ( ! std::cout )).

AND: this is standard procedure. A program which has a return code of 0 (or EXIT_SUCCESS) when there is a write error is incorrect.




回答2:


I found a solution like

#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;
 }

You can also refer to the below links here and thereto check for the correctness.



来源:https://stackoverflow.com/questions/28342660/error-handling-in-stdofstream-while-writing-data

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!