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.