実際に何をするのはifstream :: RDBUF()ん?
質問
私は、次のコードを持っており、それが(それはかなり遅いですが、私はそれについてはあまり気にしないという事実以外の)かなり良い動作します。これはoutfileにINFILEの全体の内容を記述していること直感的に思えません。
// Returns 1 if failed and 0 if successful
int WriteFileContentsToNewFile(string inFilename, string outFilename)
{
ifstream infile(inFilename.c_str(), ios::binary);
ofstream outfile(outFilename.c_str(), ios::binary);
if( infile.is_open() && outfile.is_open() && infile.good() && outfile.good() )
{
outfile << infile.rdbuf();
outfile.close();
infile.close();
}
else
return 1;
return 0;
}
任意の洞察力?
解決
はい、それが標準で指定され、それが実際には非常に簡単ですです。 rdbuf()
だけ所与basic_streambuf
オブジェクトの基礎となる[io]stream
オブジェクトへのポインタを戻します。
basic_ostream<...>
operator<<
の内容を書き込むbasic_streambuf<...>
へのポインタ用basic_streambuf<...>
ための過負荷を有している。
他のヒント
iostream
クラスは、I / Oバッファの周りだけのラッパーです。 iostream
自体は主に、それはoperator>>
の書式演算子を提供しています...全体の多くを行いません。バッファはあなたがbasic_streambuf
を使用して取得してセットすることができますrdbuf()
から派生したオブジェクトによって提供されます。
basic_streambuf
は、基礎となるデータソースがなくなるまで関数basic_ostream<…>::operator<<( basic_streambuf<…> )
がバッファを介して読み続けるように定義されている等のファイルを書き込む/読み取るための統一されたインタフェースを提供するためにオーバーライドされた仮想関数の数、文字列、抽象ベースでありますます。
iostream
ものの、ひどい混乱である。
所属していません StackOverflow