は、ドキュメントからの呼び出しのトレースです:
void std::basic_ofstream::close();
が効果的rdbuf()->close()
を呼び出します。動作中にエラーが発生すると、setstate(failbit)
が呼び出されます。
std::basic_streambuf<CharT,Traits>* std::basic_ofstream::rdbuf() const;
関連したストリームバッファを返します。ストリームバッファが関連付けられていない場合は、NULL
を返します。
std::basic_streambuf
実際ので、std::basic_filebuf
継承:
std::basic_filebuf<CharT, Traits>* std::basic_filebuf::close();
プット領域が存在する場合(例えば、ファイルが書き込みのために開かれた)、最初の呼び出しoverflow(Traits::eof())
は、ファイルに保留中のすべての出力を書き込むために、任意の不変配列を含む。
最近呼び出された関数の場合、underflow()
のうち、overflow()
、seekpos()
、およびseekoff()
、overflow()
た後、染められロケールに従ってアンシフト配列を決定するために、おそらく複数回、std::codecvt::unshift()
を呼び出し、ファイルにそのシーケンスを書き込みoverflow(Traits::eof())
となります。
次に、先行する呼び出しが成功したか失敗したかにかかわらず、std::fclose
を呼び出すことによってファイルを閉じます。
注:close()
は、一般的に順番に、一般的にstd::basic_fstream
のデストラクタによって呼び出され、std::basic_filebuf
(のデストラクタを介して呼び出されるすべての
まず、我々はそれはdoesnのことを見ることができます実際にはflush()
と直接呼び出してください。フラッシングの効果は実際にはstd::basic_filebuf::close()
の方法で発生しますが、それでもまだファイルの改ざんを行っていることがわかります。その後、ファイルは単にクローズされます。
上記の注:注:ほとんどの場合、std::basic_ofstream::close()
を明示的に呼び出す必要はありません。
私の質問を言い換えて、元の投稿の編集をご覧ください。 – NPS