Lenguaje C - Archivos

También podría gustarte

Está en la página 1de 9

Introduccin a archivos

Las estructuras de datos en almacenamientos secundarios se


denominan archivos.
Los archivos nos permite almacena grandes cantidades de datos
permanentemente que pueden recuperarse mediante unidades
pequeas para su almacenaje en memoria central y procesarse por
medio de un programa.
Un archivo es una estructura de datos compuestos por registros y estos
por campos, que reside en una unidad de almacenamiento permanente.
La forma bsica de clasificacin de archivos es:

Archivos ASCII(Texto)

Estructura de datos no estructurado formado por una


secuencia de caracteres ASCII.
Archivos Binarios

Estructura de datos compuesta por registros y campos. Con


un tipo de datos asociado el cual define su estructura. Se
lee byte por byte
La operacin de introducir datos en el sistema se denomina leer.

La generacin de datos del sistema se denomina escritura.


La lectura se realiza desde su teclado e incluso desde su unidad de
disco.
La escritura de datos se realiza en el monitor y en la impresora de su
sistema y hacia la unidad de disco.
Las funciones de entrada y salida no estn definidas en el lenguaje C,
sino que estn incorporadas en cada compilador bajo la forma de una
biblioteca de ejecucin.
En ANSI C est la biblioteca stdio.h la cual proporciona tipos de datos,
funciones y macros para acceder a los archivos.
El manejo de archivos en C se hace mediante el concepto de flujo
(streams) o canal, tambin denominado secuencia. C ve los archivos
como un flujo secuencial de byte's.
Los flujos o canales pueden estar abiertos o cerrados y conducen los
datos entre el programa y los archivos.
Hay tres tipos de canales abiertos automticamente:

extern FILE *stdin;

extern FILE *stdout;

extern FILE *stderr;

Estas tres variables se inicializan al comenzar la ejecucin del programa


y permiten admitir secuencias de caracteres, en modo texto.
stdin asocia la entrada estndar (teclado) con el programa

stdout asocia la salida estndar (pantalla) con el programa

stderr asocial la salida de mensajes de error (pantalla) con el


programa
El acceso a un archivo se hace en un buffer intermedio

Cuando se llama a una funcin para leer, la funcin lee una cadena de
caracteres del buffer y as sucesivamente hasta que el buffer queda
vaco.
El lenguaje C trabaja con archivos con buffer y esta diseado para
acceder a una amplia gama de dispositivos.
C trata a cada dispositivo como una secuencia, que puede ser de
caracteres o una secuencia binaria.

Puntero FILE
En el programa el archivo tiene un nombre interno que es un puntero a
una estructura predefinida (puntero a archivos).
El identificador del tipo de la estructura es FILE y est declarado en la
biblioteca stdio.h

Ejemplo:
Se declara un puntero a FILE
FILE* pf;
Apertura de un archivo
Para procesar un archivo en C, la primer operacin es abrir el archivo.
La apertura del archivo supone conectar el archivo externo con el programa
e indicar como va a ser tratado el archivo: binario, de caracteres, etc.
La funcin para la apertura de archivos es fopen, el formato es:
fopen (nombre de archivo, modo);
La llamada a fopen( ) se debe hacer de tal manera que el valor que
devuelve se asigne a una variable puntero FILE para as poder
referirse a dicha variable.
Esta funcin puede detectar un error al abrir el archivo, si el archivo
no existe y se quiere leer, entonces devuelve NULL.
Ejemplo:

FILE* pf;

pf = fopen(nombre de archivo, modo);

Modos de apertura de un archivo


Al abrir un archivo fopen() espera como segundo argumento el modo de tratar
el archivo.
Se establece si el archivo es de lectura, escritura o aadido y si es de texto o
binario.
Los modos bsico son:
Modo Significado
"r" Abre para lectura
"w" Abre para crear nuevo archivo (si ya existe se pierden sus datos)
"a" Abre para aadir al final
"r+" Abre archivo ya existente para modificar (leer/escribir)
"w+" Crea un archivo para escribir/leer (si ya existe se pierden sus
datos)
"a+" Abre un archivo para modificar (escribir/leer) al final. Si no existe
es como "w+"
Siempre por defecto el archivo es de texto. Para no depender del entorno es
mejor indicar si es texto o binario de la siguiente forma:

Texto "rt", "wt", "at", "r+t", "w+t", "a+t"


Binario "rb", "wb", "ab", "r+b", "w+b", "a+b"

Volcado del buffer: fflush( )

El proceso de E/S con archivos se realiza a travs del buffer (memoria


interna).
La operacin de grabar escribe los datos al buffer, en el momento que se
llena se vuelca (envia) a el dispositivo externo.
La operacin de lectura vuelca datos del dispositivo al buffer, cuando se
ha ledo todo el buffer, la misma operacin de lectura vuelca nuevos
datos al buffer.
La finalidad del buffer es disminuir el tiempo de acceso a los archivos.
La operacin de cierre de un archivo vuelca el buffer en el archivo.
Adems C dispone de la funcin fflush( ) para volcar y vaciar el buffer.

FILE *fc;
fc = fopen("archivo","w");

fflush(fc);

Funciones de E/S para archivo


Una vez abierto el archivo para escribir hay que grabar los datos en el archivo.
La biblioteca C proporciona diversas funciones para escribir datos en el archivo
a travs del puntero s FILE asociado.
Las funciones de entrada y salida de archivos son similares a las utilizadas
para teclado (stdin) y pantalla (stdout).
Todas las versiones de archivo comienzan con la letra f, as tenemos:
fprintf( )
fscanf( )
fputs( )
fgets( )

Funciones putc( ) y fputc( )


Ambas funciones son idnticas.
Escriben un carcter en el archivo asociado con el puntero FILE,
Devuelven el carcter escrito o EOF si no puede ser escrito.
El formato de llamada es:
putc(c, puntero_archivo);
fputc(c, puntero_archivo);
Siendo c el carcter a escribir.
Funciones getc( ) y fgetc( )

Ambas funciones son idnticas.


Leen un carcter (el siguiente carcter) en el archivo asociado con el
puntero FILE y devuelven el carcter escrito o EOF si no puede ser
escrito.
El formato de llamada es:
getc(puntero_archivo);
fgetc(puntero_archivo);

Funciones fputs( ) y fgets( )

Estas funciones escriben/leen una cadena de caracteres en el archivo asociado.

La funcin fputs( ) escribe una cadena de caracteres.


La funcin devuelve EOF si no ha podido escribir la cadena, un valor no negativo si
es correcta.

El formato de llamada es:


fputs(cadena, puntero);

La funcin fgets( ) lee una cadena de caracteres del archivo. Termina de leer cuando
encuentra el fin de lnea, o bien cuando ha ledo n-1 caracteres, siendo n un
argumento de la funcin.
La funcin devuelve un puntero a la cadena devuelta, o NULL si existe un error.

El formato de llamada es:


fgets(cadena,n,puntero_archivo);

Funciones fprintf( ) y fscanf( )

Las funciones fprintf y fscanf tienen las mismas funcionalidades que printf( ) y
scanf( ).
Estas dos funciones tienen como primer argumento el puntero a FILE asociado al
archivo de texto.
fprintf(puntero_archivo,"cadena_de_control",dato1,dato2,);
fscanf(puntero_archivo,"cadena_de_control",var1,var2,);

Funcin feof( )

Diversas funciones de lectura de caracteres devuelven EOF cuando leen el carcter


del fin de archivo. Con dicho valor, que es una macro definida en stdio.h, a sido
posible formar ciclos para leer un archivo completo.
La funcin feof( ) devuelve un valor distinto de 0 (True) cuando se lee el carcter de
fin de archivo, en caso contrario devuelve 0 (False).
Funcin rewind( )

Una vez alcanzado el fin de archivo, nuevas llamadas feof( ) siguen devolviendo un
valor distinto de cero (True).
Con la funcin rewind( ) se situa el puntero del archivo al inicio de ste.

El formato de llamada es:


rewind(puntero_archivo);

Archivos binarios

Para abrir un archivo binario hay que especificar la opcin b en la cadena de modo.
Los archivos binarios son secuencias de 0,s y 1,s.
Una caracterstica de los archivos binarios es que optimizan la memoria ocupada
por un archivo, sobre todo con campos numricos.
La mayor eficiencia de los archivos binario se contrapone con el echo de que su
lectura se ha de realizar en nodo binario y solo se pueden visualizar desde C.
Los modos para abrir un archivo binario son:
"rb", "wb", "ab", "r+b", "w+b", "a+b"

Ejemplo:
FILE *pfl, *pf2, "pf3;
pf1 = fopen("prueba.arr", "rb") ;
pf2 = fopen ("tempes.feb", "w+b");
Pf3 = fopen("telcon.fff", "ab");

La biblioteca de C proporciona dos funciones especialmente dirigidas al proceso de


entrada y salida de archivos binarios con buffer: fread( ) y fwrite( ).

Funcin fwrite( )

La funcin fwrite( ) escribe un buffer de cualquier tipo de dato en un archivo


binario. El formato de llamada es:

fwrite(direccin_buffer, tamao, num_elementos, puntero archivo);

Funcin fread( )

La funcin lee de un archivo n bloques de bytes y lo almacena en un buffer.


El nmero de byte de cada bloque (tamao) se pasa como parmetro, el igual que el
nmero n de bloques y la direccin de buffer (variable) donde se almacena. El
formato de llamada es:

fread(direccin_buffer, tamao,n, puntero archivo);


La funcin devuelve el nmero de bloques que lee y debe coincidir con n.

También podría gustarte