std::basic_filebuf<CharT,Traits>:: close

From cppreference.com
std:: basic_filebuf < CharT, Traits > * close ( ) ;

If a put area exist (e.g. file was opened for writing), first calls overflow ( Traits :: eof ( ) ) to write all pending output to the file, including any unshift sequences.

If the most recently called function, out of underflow() , overflow() , seekpos() , and seekoff() , was overflow() , then calls std::codecvt::unshift() , perhaps multiple times, to determine the unshift sequence according to the imbued locale, and writes that sequence to file with overflow ( Traits :: eof ( ) ) .

Then, closes the file as if by calling std::fclose() , regardless of whether any of the preceding calls succeeded or failed.

If any of the function calls made, including the call to std::fclose() , fails, returns a null pointer. If any of the function calls made throws an exception, the exception is caught and rethrown after closing the file. If the file is already closed, returns a null pointer right away.

In any case, updates the private member variable that is accessed by is_open() .

Parameters

(none)

Return value

this on success, a null pointer on failure.

Notes

close() is typically called through the destructor of std::basic_filebuf (which, in turn, is typically called by the destructor of std::basic_fstream .

Example

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 443 C++98 the file was written using overflow ( EOF ) changed to overflow ( Traits :: eof ( ) )
LWG 622 C++98 it was unclear how to handle the
exception thrown during closing
it is rethrown after closing the file

See also

checks if the associated file is open
(public member function)
[virtual]
destructs a basic_filebuf object and closes the file if it is open
(virtual public member function)