¿Que significa ",std:ios:app" en C++?

Estoy haciendo un programa en C++, en el cual una de sus partes en el código es que abra un archivo de texto.

Investigando en internet me tope con una línea de código que era

std::ofstream archivo;

Archivo. Open("miArchivo.txt", std::ios::app);

Mi programa no corre bien, y tengo las sospecha de que la clave esta en esa línea, pero no se que hace el "std::ios::app", y me gustaría saberlo.

También he visto en otras partes cosas más sencillas y similares como esto:

Archivo.open("miArchivo.txt", fstream::app);

Pero tambien desconosco su funcion.

1 Respuesta

Respuesta
2

Std::ios::app especifica la opción append de la clase ios que esta en el namespace std. Lo que quiere decir es que esta abriendo el archivo de nombre "Archivo" con la opción append.

Fstream::app es la misma opción append pero utilizando la clase fstream que es el stream que se utiliza con los archivos, mientras que ios es su superclase y es mas genérica, además de abstracta.

¡Gracias! Me sirvió mucho!!! 

Y que no es lo mismo poner solamente 

Archivo.open("miArchivo.txt",);

Sin el STD::iOS::app 

?

Saludos

En la pagina http://www.cplusplus.com/reference/fstream/ofstream/open/ indica que el modo por defecto es out, y por lo tanto, borrará el contenido del archivo, a menos que especifiquemos app (de append = añadir desde el final del archivo sin  borrar el contenido del archivo).

Lo único que veo mal en el código es la coma que hay después del nombre del archivo (no debe estar).

Una ultima cosa, el modo de apertura (openmode) de los archivos esta definido en la clase ios_base, por lo que todas sus subclases (ios, istream, ostream, ifstream, ofstream,...) lo pueden utilizar, por lo que si queremos utilizar bien el código deberíamos poner std::ios_base::app (por ejemplo) y asi todo el mundo que lea tu código (incluso tu mismo dentro de unos meses) sabrá de donde viene ese openmode.

Si al principio del código pones 'using std', el openmode lo puedes poner como 'ios_base::app' sin especificar explícitamente el namespace.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas