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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…