Error handling in std::ofstream while writing data

后端 未结 2 464
日久生厌
日久生厌 2020-12-10 03:44

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

#include
#include
using namespace std;
int main         


        
2条回答
  •  一生所求
    2020-12-10 04:42

    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.

提交回复
热议问题