Compartir vía


Funciones de miembro de flujo de archivos de salida

Las funciones miembro de flujo de salida tienen tres tipos: las que son equivalentes a los manipuladores, las que realizan operaciones de escritura sin formato y las que, de otro modo, modifican el estado de la secuencia y no tienen un manipulador ni un operador de inserción equivalente. Para la salida con formato secuencial, solo puede usar operadores de inserción y manipuladores. Para la salida de disco binario de acceso aleatorio, use otras funciones miembro, con o sin operadores de inserción.

La función Open para flujos de salida

Para usar un flujo de archivos de salida (ofstream), debe asociar ese flujo con un archivo de disco específico en el constructor o con la función open. Si usa la función open, puede volver a usar el mismo objeto de flujo con una serie de archivos. En cualquier caso, los argumentos que describen el archivo son los mismos.

Cuando abre el archivo asociado con un flujo de salida, generalmente especifica una marca open_mode. Puede combinar estas marcas, que se definen como enumeradores en la clase ios, con el operador OR bit a bit (|). Vea ios_base::openmode para obtener una lista de los enumeradores.

Tres situaciones comunes de flujo de salida tienen en cuenta las opciones de modo:

  • Crear un archivo. Si el archivo ya existe, la versión anterior se elimina.

    ofstream ofile("FILENAME");
    // Default is ios::out
    
    ofstream ofile("FILENAME", ios::out);
    // Equivalent to above
    
  • Anexar registros a un archivo existente o crear uno si no existe.

    ofstream ofile("FILENAME", ios::app);
    
  • Abrir dos archivos, uno cada vez, en la misma secuencia.

    ofstream ofile();
    ofile.open("FILE1", ios::in);
    // Do some output
    ofile.close();    // FILE1 closed
    ofile.open("FILE2", ios::in);
    // Do some more output
    ofile.close();    // FILE2 closed
    // When ofile goes out of scope it is destroyed.
    

La función put

La función put escribe un carácter en el flujo de salida. Las dos instrucciones siguientes son las mismas de manera predeterminada, pero la segunda se ve afectada por los argumentos de formato de la secuencia:

cout.put('A');

// Exactly one character written
cout <<'A'; // Format arguments 'width' and 'fill' apply

La función write

La función write escribe un bloque de memoria en un flujo de archivos de salida. El argumento de longitud especifica el número de bytes escritos. Este ejemplo crea un flujo de archivos de salida y escribe el valor binario de la estructura Date en este:

// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;

struct Date
{
   int mo, da, yr;
};

int main( )
{
   Date dt = { 6, 10, 92 };
   ofstream tfile( "date.dat" , ios::binary );
   tfile.write( (char *) &dt, sizeof dt );
}

La función write no se detiene cuando llega a un carácter NULL, por lo que se escribe la estructura de clase completa. La función toma dos argumentos: un puntero char y un recuento de caracteres que se va a escribir. Tenga en cuenta la conversión necesaria a char * antes de la dirección del objeto de estructura.

Las funciones Seekp y Tellp

Un flujo de archivos de salida mantiene un puntero interno que señala a la posición donde los datos se van a escribir a continuación. La función miembro seekp establece este puntero y, por lo tanto, proporciona una salida de archivo de disco de acceso aleatorio. La función miembro tellp devuelve la posición del archivo. Para obtener ejemplos que usan el flujo de entrada equivalente a seekp y tellp, vea Las funciones seekg y tellg.

La función Close para flujos de salida

La función miembro close cierra el archivo de disco asociado con un flujo de archivos de salida. El archivo debe cerrarse para completar toda la salida de disco. En caso necesario, el destructor ofstream cierra el archivo de manera automática, pero puede usar la función close si necesita abrir otro archivo para el mismo objeto de secuencia.

El destructor de flujo de salida cierra automáticamente un archivo de secuencia solo si el constructor o la función miembro open ha abierto el archivo. Si pasa al constructor un descriptor de archivo para un archivo que ya está abierto o usa la función miembro attach, debe cerrar el archivo explícitamente.

Funciones de procesamiento de errores

Use estas funciones miembro para probar errores al escribir en una secuencia:

Función Valor devuelto
bad Devuelve true si hay un error irrecuperable.
fail Devuelve true si hay un error irrecuperable o una condición "esperada", como un error de conversión, o si el archivo no se encuentra. A menudo se puede reanudar el procesamiento después de una llamada a clear con un argumento cero.
good Devuelve true si no existe ninguna condición de error (irrecuperable o de otro tipo) y la marca de fin de archivo no se establece.
eof Devuelve true en la condición de fin de archivo.
clear Establece el estado de error interno. Si se ha llamado con los argumentos predeterminados, borra todos los bits de error.
rdstate Devuelve el estado de error actual.

El operador ! se sobrecarga para realizar la misma función que la función fail. Por lo tanto, la expresión:

if(!cout)...

equivale a:

if(cout.fail())...

El operador void*() se sobrecarga para ser el contrario del operador !, de ahí la expresión:

if(cout)...

es igual a:

if(!cout.fail())...

El operador void*() no equivale a good porque no se prueba para el final del archivo.

Consulte también

Flujos de salida