read good fin cplusplus c++ ifstream

c++ - good - ¿Qué hace realmente ifstream:: rdbuf()?



ifstream get (2)

Tengo el siguiente código y funciona bastante bien (aparte del hecho de que es bastante lento, pero eso no me importa mucho). No parece intuitivo que esto escriba todo el contenido del archivo en el archivo de salida.

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

¿Alguna idea?


Sí, está especificado en el estándar y en realidad es bastante simple. rdbuf() simplemente devuelve un puntero al objeto basic_streambuf subyacente para el objeto de [io]stream dado.

basic_ostream<...> tiene una sobrecarga para el operator<< para un puntero a basic_streambuf<...> que escribe el contenido de basic_streambuf<...> .


iostream clases de iostream son simplemente envoltorios alrededor de buffers de E / S. El propio iostream no hace mucho ... principalmente, proporciona operator>> formateo a operator>> operadores. El búfer es proporcionado por un objeto derivado de basic_streambuf , que puede obtener y establecer utilizando rdbuf() .

basic_streambuf es una base abstracta con una serie de funciones virtuales que se anulan para proporcionar una interfaz uniforme para leer / escribir archivos, cadenas, etc. La función basic_ostream<…>::operator<<( basic_streambuf<…> ) se define para mantener leyendo el búfer hasta que se agote la fuente de datos subyacente.

iostream embargo, iostream es un desastre terrible.