5.4.2. Modos de apertura

Puede controlar la manera en que un fichero es abierto sobreescribiendo los argumentos por defecto del constructor. La siguiente tabla muestra las banderas que controlan el modo de un fichero:

Bandera

Función

ios::in

Abre el fichero de entrada. Use esto como un modo de apertura para un ofstream para prevenir que un fichero existente sea truncado.

ios::out

Abre un fichero de salida. Cuando es usado por un ofstream sin ios::app, ios::ate o ios::in, ios::trunc es implicado.

ios::app

Abre un fichero de salida para solo añadir .

ios::ate

Abre un fichero existente (ya sea de entrada o salida) y busca el final.

ios::trunc

Trunca el fichero antiguo si este ya existe.

ios::binary

Abre un fichero en modo binario. Por defecto es en modo texto.

Puede combinar estas banderas usando la operación or para bits

El flag binario, aun siendo portable, solo tiene efecto en algunos sistemas no UNIX, como sistemas operativos derivados de MS-DOS, que tiene convenciones especiales para el almacenamiento de delimitadores de final de línea. Por ejemplo, en sistemas MS-DOS en modo texto (el cual es por defecto), cada vez que usted inserta un nuevo carácter de nueva línea ('\n'), el sistema de ficheros en realidad inserta dos carácteres, un par retorno de carro/fin de línea (CRLF), que es el par de carácteres ASCII 0x0D y 0x0A. En sentido opuesto, cuando usted lee este fichero de vuelta a memoria en modo texto, cada ocurrencia de este par de bytes causa que un '\n' sea enviado al programa en su lugar. Si quiere sobrepasar este procesado especial, puede abrir el fichero en modo binario. El modo binario no tiene nada que ver ya que usted puede escribir bytes sin formato en un fichero - siempre puede (llamando a write()). Usted debería, por tanto, abrir un fichero en modo binario cuando vaya a usar read() o write(), porque estas funciones toman un contador de bytes como parámetro. Tener carácteres extra '\r' estropeará su contador de bytes en estas instancias. Usted también puede abrir un fichero en formato binario si va a usar comandos de posicionamiento en el stream que se discuten más adelante.

Usted puede abrir un fichero tanto para entrada como salida declarando un objeto fstream. cuando declara un objeto fstream, debe usar suficientes banderas de modos de apertura mencionados antes para dejar que el sistema de ficheros sepa si quiere leer, escribir, o ambos. Para cambiar de salida a entrada, necesita o bien limpiar el stream o bien cambiar la posición en el fichero. Para cambiar de entrada a salida, cambie la posicion en el fichero. Para crear un fichero usando un objeto fstream, use la bandera de modo de apertura ios::trunc en la llamada al constructor para usar entrada y salida.