Archivos - Elisa Schaeffer

Anuncio
Programación científica
Archivos
Dra. Elisa Schaeffer
[email protected]
PISIS / FIME / UANL
Archivos– p. 1
Tipo de dato FILE
En ANSI-C, un FILE es un “mango” a un archivo en el
sistema de archivos.
Típicamente manejamos un puntero al mango, o sea, un
FILE ∗.
Archivos– p. 2
Terminal y teclado
stdin
stdout
stderr
teclado para leer
terminal para escribir
errores para escribir
Entonces,
fprintf(stdout, ...); =
fscanf(stdin, ...);
=
printf(...);
scanf(...);
Archivos– p. 3
Abrir: leer/escribir
FILE∗ f = fopen(...);
Dos parámetros:
el nombre del
archivo
el modo de acceso
La salida es NULL si la operación no
fue éxitosa.
Archivos– p. 4
Modos de acceso
r
w
a
r+
w+
a+
...b
leer
escribir reemplazando
escribir añadiendo
leer o escribir
crear para leer y escribir
crear o abrir para añadir
lo definido en modo binario
Las operaciones para escribir crean el archivo dicho si
todavía no existe. Cuidado con no reemplazar archivos
existentes de importancia.
Archivos– p. 5
Leer símbolo por símbolo
int c = fgetc(...) toma un mango FILE ∗, lee un
símbolo (en un int ) y lo envia a su salida.
El caractér EOF indica el fin de archivo.
fgetc(stdin) = getc()
ungetc(...) dado un símbolo (char ) y un mango (FILE
∗), devuelve el símbolo “virtualmente” al archivo para que
el siguiente símbolo leído sea el símbolo “repuesto”.
Archivos– p. 6
Leer línea por línea
Con fgets(...) podemos leer una línea a la vez.
Toma tres parámetros: un char ∗ al espacio donde
guardar la línea leída, el largo máximo de la línea (int ) y el
mango FILE ∗ al archivo.
La salida es NULL si la operación falló y un char ∗ válido
en otro caso.
Archivos– p. 7
Escribir línea por línea
Los símbolos a los cuales apunta un char ∗ pueden ser
escritos en un archivo por pasar el puntero a ellos juntos
con el mango al archivo a fputs(...).
La salida es cero si todo fue bien, no cero si hubo errores.
Archivos– p. 8
¿Todavía queda algo?
feof(...) toma un mango y devuelve “1” si el archivo ya
está procesado a su final y “0” en otro caso.
Archivos– p. 9
Todo a la vez
fread(...) lee los contenidos del archivo entero dado
cuatro parámetros:
1. un char ∗ a dónde guardar lo leído
2. el tamaño de la unidad leída en múltiples de
sizeof(char) (o sea, “1”)
3. el número de unidades para leer
4. el mango al archivo FILE ∗
La salida es no cero si algo fue leído éxitosamente.
También existe fwrite(...) con los mismos tipos de
parámetros.
Archivos– p. 10
Asegurar que todo entre
No todo el contenido escrito en un archivo aparece en ello
inmediatamente en el disco.
Para asegurar que el contenido sea transferido al disco,
hay que llamar fflush(...) con el mango del archivo.
Archivos– p. 11
Volver a procesar
Con rewind podemos regresar el mango al inicio del
archivo. El único parámetro es el mango mismo.
Archivos– p. 12
Cerrar
Cuando acceso a un archivo ya no es necesario, el mango
se elimina por fclose(...) donde el único parámetro es
el mango FILE ∗.
Es importante checar que no sea NULL el mango; al
cerrar un NULL , típicamente habrá errores durante
ejecución.
Archivos– p. 13
stdio.h
Todo esto y más está incluido en la librería stdio.h .
En C++ hay aún más funciones para manejar archivos (ver
fstream) y para Java existe una librería ámplia también.
Archivos– p. 14
Descargar