Frage

Ich habe den folgenden Code und es funktioniert recht gut (abgesehen von der Tatsache, dass es ziemlich langsam ist, aber ich weiß nicht viel darüber). Es scheint nicht intuitiv, dass dies den gesamten Inhalt des infile zum outfile schreiben würde.

// 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;
}

Jede Einsicht?

War es hilfreich?

Lösung

Ja, es ist in der Norm festgelegt und es ist eigentlich ganz einfach. rdbuf() nur gibt einen Zeiger auf das darunter liegende basic_streambuf Objekt für das gegebene [io]stream Objekt.

basic_ostream<...> hat eine Überlastung für operator<< für einen Zeiger auf basic_streambuf<...>, die den Inhalt des basic_streambuf<...> schreibt.

Andere Tipps

iostream Klassen sind nur Wrapper um I / O-Puffer. Die iostream selbst macht nicht viel ... vor allem, es ist die operator>> Formatierung Betreiber zur Verfügung stellt. Der Puffer wird durch ein Objekt zur Verfügung gestellt von basic_streambuf abgeleitet, die Sie erhalten und Set können rdbuf() verwendet wird.

basic_streambuf eine abstrakte Basis mit einer Reihe von virtuellen Funktionen, die eine einheitliche Schnittstelle zur Verfügung zu stellen für das Lesen / Schreiben von Dateien überschrieben werden, Strings, usw. Die Funktion basic_ostream<…>::operator<<( basic_streambuf<…> ) ist definiert durch den Puffer zu lesen Sie, bis die zugrunde liegende Datenquelle erschöpft ist .

iostream ist eine schreckliche Unordnung, though.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top