質問

私は、次のコードを持っており、それが(それはかなり遅いですが、私はそれについてはあまり気にしないという事実以外の)かなり良い動作します。これは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ものの、ひどい混乱である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top