6. Acceso Secuencial

6.1. Metodo : close

Manos a la obra. Ahora comenzaremos a ver realmente código que nos permita utilizar los
conceptos citados anteriormente.

Figura 1

  • Es un flujo de salida, si cambiamos ofstream por ifstream al compilar ,tiraría un error, ya que al ser un flujo de entrada no podemos usar el operador “<<” .
    Ver que al ser ofstream, no es necesario indicar el modo como : ios::out, ya que se establece por defecto.
  • Al especificar ios::app, lo que se agregue al archivo; se ubicará al final.
    Ver que no se incluye  #include iostream , no es necesaria en este ejercicio.
    Cuando el programa ha terminado de manipular el fichero, éste debe cerrarse. Para cerrar un archivo, basta con ejecutar la función close sobre el flujo asociado al fichero. Vemos el uso de el método “.close”, este método se aplica al stream llamado “flujo” de manera de cerrar el mismo, esto hace que se vuelque el contenido del flujo al archivo y se cierre el archivo, puede que si omitimos esta línea al finalizar el programa el archivo es cerrado automáticamente y el flujo descartado, de todas maneras ponerlo de manera explícita hace al buen programador.

También podríamos escribir el programa anterior de la siguiente manera:

Figura 2

  • En este caso usamos la clase fstream, e indicamos que el modo será E/S ( ios::in | ios::out) y que se agregue al final con ios::app.
  • Como fstream básicamente trabaja con E/S, los argumentos de modo ios::in | ios::out , se pueden omitir y funcionaría igual el programa, de echo esto se hizo en la figura 2.

Figura 3

  • Este programa agrega al archivo anterior “prueba.txt”que tenía “Hola Mundo”, el texto :Hola1 Mundo1.
  • Si se omite en el programa ios::in | ios::out, y solamente dejamos ios::app ,esto no sucedería.
  • Se debe prestar atención a los argumentos de modo, ya que cuando no indicamos en forma explícita el argumento de modo se suelen tomar argumentos por defecto y estos ocasionan lo indicado en el punto anterior.

Figura 4
Este código tiene el argumento de modo ios::trunc, por lo tanto el contenido del archivo
“prueba.txt” será eliminado y solo quedará “Hola 1” y “Mundo 1”, eliminandose el “Hola
Mundo” anterior.

¿No necesito abrir el flujo?

En algunas condiciones, no debería cerrar el flujo. Imaginemos hice una corrección y quiero guardar esa corrección, pero seguir corrigiendo. En ese caso NO TIENE SENTIDO HACER close! , en cambio vamos a usar el método flush que guarda el contenido del flujo al archivo, pero no lo cierra.