Video: Descodificación del sobrepeso por Marta Menéndez 2025
Cuando abre un archivo construyendo una instancia ofstream o ifstream, puede modificar la forma en que se abrirá el archivo suministrando lo que se denomina flags. En términos informáticos, una marca es simplemente un pequeño elemento cuya presencia o falta de presencia le dice a una función cómo hacer algo. Con las clases ofstream y ifstream, la función en cuestión es el constructor.
Una bandera se ve como ios:: aplicación si está utilizando un compilador que no es totalmente compatible con ANSI, o se parece a ios_base:: aplicación si está utilizando una que es totalmente compatible con ANSI. Esta bandera en particular significa que desea escribir en un archivo, pero desea agregar a cualquier información existente que ya esté en un archivo. Usted suministra esta bandera como un argumento del constructor para ofstream, como en cualquiera de los siguientes ejemplos:
del flujo de salida ("AppendableFile. Txt", ios:: app); archivo de salida ofstream ("AppendableFile. txt", ios_base:: app);
Puede ver que la bandera se agrega como un segundo parámetro al constructor. Existen otros indicadores además de la aplicación, y puede combinarlos usando el operador o, |. Por ejemplo, un indicador es ios:: nocreate (que no está incluido en los compiladores más nuevos).
Esto significa "solo abra el archivo si ya existe". "Es decir, no crees el archivo si no existe". (Recuerde, ofstream crea un archivo si aún no existe). Si el archivo no existe, la apertura fallará, y cuando llame falle, obtendrá un verdadero .
El indicador ios:: nocreate es útil con ios:: app. Juntos, estos significan abrir un archivo existente y anexarlo . Es decir, los dos juntos funcionarán solo si el archivo ya existe y la llamada abrirá el archivo para una operación de adición. Si el archivo aún no existe, el archivo no se creará. Aquí hay una llamada de muestra:
ofstream outfile ("… / MyFile. Txt", ios:: app | ios:: nocreate); if (outfile. fail ()) {cout << "no se pudo abrir el archivo!" << endl; return 0;} outfile << "hola" << endl; archivo externo cerca();
Si MyFile. txt no existe cuando ejecuta este código, recibe el mensaje ¡No se pudo abrir el archivo! Pero si MyFile. txt existe, la aplicación lo abre, agrega la cadena Hola a él y finalmente lo cierra.
Resulta que el indicador nocreate no está disponible en la nueva Biblioteca estándar. Gorrón. Por lo tanto, el código solo funciona si está utilizando una versión anterior de la biblioteca. Al usar el Código:: Bloquea el compilador, aparece el siguiente mensaje de error:
error: 'nocreate' no es miembro de '; std:: ios '
Sin embargo, querrás probar si tu compilador particular incluye una biblioteca que admite ios:: nocreate.Su compilador puede admitirlo de todos modos, incluso si incluye la nueva Biblioteca estándar. Como alternativa a ios:: nocreate, puede usar el siguiente código (que se encuentra en el ejemplo FileOutput02):
ifstream infile ("… / MyFile. Txt"); if (infile. fail ()) {cout << "no se pudo abrir el archivo!" << endl; return 0;} infile. cerca(); ofstream outfile ("… / MyFile. txt", ios:: aplicación); archivar << "hi" << endl; archivo externo cerca();
En este caso, comienzas por intentar abrir el archivo para leerlo. Si el archivo no existe, no puede leer de él y el código sale con un mensaje de error. Si el código puede leer del archivo, vuelve a abrir el archivo para escritura. Esta es una solución engorrosa, pero funciona.
La siguiente es una lista de los indicadores disponibles. En primer lugar, aquí están los de ios, en caso de que esté utilizando un compilador que no sea completamente compatible con ANSI:
-
ios:: aplicación: este indicador significa que desea abrir un archivo y anexarlo.
-
ios:: in: incluya esta marca si desea leer desde un archivo.
-
ios:: out : Incluya esta bandera si desea escribir en un archivo.
-
ios:: trunc : Incluya esta bandera si desea borrar el contenido del archivo antes de escribir en él. Es lo opuesto a append, y también es el predeterminado si no incluye específicamente ios:: app.
-
ios:: nocreate : Utilice este indicador si desea asegurarse de que el archivo no se creará si no existe, lo que provocará que el archivo no se abra.
-
ios:: noplaceplace : Esta bandera es lo opuesto a nocreate. Use esta bandera si solo desea crear un nuevo archivo. Si usa esta bandera y el archivo ya existe, el archivo no se abrirá, y esa falla devolverá verdadero .
Los compiladores que cumplen con ANSI no son compatibles con el indicador ios:: noreplace tampoco. En este caso, puede usar lo contrario de la corrección para el indicador ios: nocreate, como se muestra aquí (y se encuentra en el ejemplo FileOutput03):
ifstream infile ("… / MyFile. Txt"); if (! infile. fail ()) {cout << "¡el archivo ya existe!" << endl; return 0;} infile. cerca(); ofstream outfile ("… / MyFile. txt"); archivar << "hi" << endl; archivo externo cerca();
En este caso, el código intenta abrir el archivo para su lectura. Si el archivo existe, el código muestra un mensaje de error y sale. De lo contrario, el código crea un nuevo archivo y escribe en él.
¡Los siguientes indicadores están disponibles en un compilador que cumple absolutamente con ANSI!
-
ios:: ate: use este indicador para ir al final del archivo después de abrirlo. Normalmente, usa este indicador cuando desea agregar datos al archivo.
-
ios_base:: binary: use este indicador para especificar que el archivo que está abriendo tendrá datos binarios, es decir, datos que no representan cadenas de caracteres.
-
ios_base:: in: especifique este indicador cuando quiera leer desde un archivo.
-
ios_base:: out: incluya esta marca cuando desee escribir en un archivo.
-
ios_base:: trunc: incluya esta marca si desea borrar el contenido de un archivo antes de escribir en él.
-
ios_base:: aplicación: incluya esta marca si desea agregar al archivo. Es lo opuesto a trunc, es decir, la información que ya está en el archivo cuando la abra permanecerá allí.
¿Por qué necesitas una bandera y una bandera de salida? Parece que la computadora debe saber si está escribiendo en un archivo o leyendo de él, dependiendo (respectivamente) de si usa stream o ifstream. La respuesta a por qué tiene una bandera de entrada y una bandera de salida es que hay otras clases disponibles además de corriente y corriente continua.
Los compiladores que aún no admiten completamente el estándar ANSI tienen una clase genérica en sus bibliotecas llamada fstream. Los compiladores que cumplen con ANSI tienen en sus bibliotecas una clase de plantilla llamada basic_filebuf y una clase llamada filebuf. Si usa estas clases, puede usar las banderas de entrada y salida.
