Что делает ifstream:: rdbuf() на самом деле?

У меня есть следующий код, и он работает довольно хорошо (кроме того, что он довольно медленный, но меня это не волнует). Не кажется интуитивным, что это напишет все содержимое infile в outfile.

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

любое понимание?

2 ответов


Да, это указано в стандарте и это на самом деле довольно просто. rdbuf() просто возвращает указатель на базовый basic_streambuf объект для данного


iostream классы-это просто обертки вокруг буферов ввода-вывода. The iostream сам по себе не делает много... в основном, это обеспечивает operator>> операторы форматирования. Буфер предоставляется объектом, производным от basic_streambuf, который вы можете получить и установить с помощью rdbuf().

basic_streambuf - это абстрактный базовый ряд виртуальных функций, которые могут быть переопределены, чтобы обеспечить единый интерфейс для чтения/записи файлов, строк и т. д. Функция basic_ostream<…>::operator<<( basic_streambuf<…> ) определен продолжайте читать через буфер до исчерпания базового источника данных.

iostream ужасный беспорядок, хотя.