MANEJO DE ARCHIVOS
Flujos:
Un flujo (stream)
es una abstracción que se refiere a una corriente de datos que fluyen entre un
origen o fuente (productor) y un destino o sumidero (consumidor). Entre el
origen y el destino debe existir una conexión o canal (pipe) por la que
circulen los datos. La apertura de un archivo supone la conexión del programa
con el dispositivo que contiene el archivo; por el canal que comunica el
archivo con el programa van a fluir las secuencias de datos. Hay tres flujos o
canales abiertos automáticamente:
- Extern FILE *stdin;
- Extern FILE *stdout;
- Extern FILE *stderr;
Apuntador (puntero) FILE:
Los archivos se ubican en dispositivos
externos como cintas, cartuchos, discos, discos compactos, etc., y tienen un
nombre y unas características. En el programa el archivo tiene un nombre
interno que es un puntero a una estructura predefinida (apuntador a archivo).
Esta estructura contiene información sobre el archivo, tal como la dirección
del buffer que utiliza, el modo de apertura del archivo, el último carácter
leído del buffer y otros detalles que generalmente el usuario no necesita
saber. El identificador del tipo de la estructura es FILE y está declarada en
el archivo de cabecera stdio.h.
Ejemplo:
FILE* pf;
Apertura de un archivo:
Para procesar un
archivo en C (y en todos los lenguajes de programación) la primera operación
que hay que realizar es abrir el archivo. La apertura del archivo supone
conectar el archivo externo con el programa, e indicar como va ser tratado el
archivo: binario, de caracteres, etc. El programa accede a los archivos a
través de un puntero a la estructura FILE, la función de apertura devuelve dicho
puntero. La función para abrir un archivo es fopen( ) , el
formato de llamada es:
fopen (nombre_archivo, modo);
Donde
nombre: Contiene el identificador
externo del archivo.
modo: Contiene el modo en que se va a
tratar el archivo.
Ejemplo:
FILE* pf;
pf = fopen (nombre_archivo, modo);
Modos de apertura de un archivo:
Al abrir el archivo, fopen( ) espera
como segundo argumento el modo de tratar el archivo. Fundamentalmente se
establece si el archivo es de lectura, escritura o añadido, y si es de texto o
binario. Para no depender del entorno es mejor indicar si es de texto o
binario. Se utiliza la letra b para modo binario como ultimo carácter de la
cadena ”modo”. Algunos compiladores admiten la letra t para indicar archivo
texto. Por consiguiente, los modos de abrir un archivo de texto son:
“rt”, “wt”,
“at”, “r+t”, “w+t”, “a+t”.
Y los modos de abrir
un archivo binario son:
“rb”, “wb”,
“ab”, “r+b”, “w+b”, “a+b”.
“r+”: Abre para lectura
“w+”: Abre para crear nuevo archivo (si
ya existen se pierden sus datos).
“a”: Abre para añadir al final.
“r+”: Abre archivo ya existente para
modificar (leer/escribir).
“w+”: Crea un archivo para escribir /
leer (si ya existe se pierden los datos).
“a+”: Abre el archivo para modificar
(escribir/leer) al final. Si no existe es como w+.
NULL y EOF:
Las funciones de biblioteca de E/S de
archivos, generalmente empiezan por f de file, tienen especificado que son de
tipo entero de tal forma que si la operación falla devuelven EOF, también
devuelven EOF para indicar que se ha leído el fin de archivo. Esta macro está
definida en stdio.h.
Ejemplo:
int c:
while ((c=getchar( )) != EOF)
{
…..
}
Cierre de archivos:
Los archivos en C trabajan con una
memoria intermedia, buffer. La entrada y salida de datos se almacena en ese
buffer, volcándose cuando está lleno. Al terminar la ejecución del programa
podrá ocurrir que haya datos en el buffer; si no se volcasen en el archivo este
quedaría sin las ultimas actualizaciones. Siempre que se termina de procesar un
archivo y termine la ejecución del programa hay que cerrar los archivos
abiertos para que, entre otras acciones, se vuelque el buffer.
La función fclose (puntero_file) cierra
el archivo asociado al puntero_file y devuelve EOF si ha habido un error al
cerrar. El prototipo de la función se encuentra en stdio.h y es:
int fclose(FILE* pf);
0 comentarios: