Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Contenido
Introduccin Lectura de un fichero o El puntero FILE * o Abrir el fichero - fopen o Comprobar si est abierto o Lectura del fichero - getc o Comprobar fin de fichero - feof o Cerrar el fichero - fclose Lectura de lneas - fgets fread Ejercicios
Introduccin
Hasta el captulo anterior no habamos visto ninguna forma de guardar permanentemente los datos y resultados de nuestros programas. En este captulo vamos a verlo mediante el manejo de ficheros. En el captulo anterior usbamos la redireccin para crear ficheros. Este es un sistema poco flexible para manejar ficheros. Ahora vamos a crear y modificar ficheros usando las funciones estndar del C. Es importante indicar que los ficheros no son nicamente los archivos que guardamos en el disco duro, en C todos los dispositivos del ordenador se tratan como ficheros: la impresora, el teclado, la pantalla,...
[Arriba]
Lectura de un fichero
Para entrar en materia vamos a analizar un ejemplo que lee un fichero de texto y lo muestra en la pantalla: #include <stdio.h> int main() { FILE *fichero; char letra; fichero = fopen("origen.txt","r"); if (fichero==NULL) { printf( "No se puede abrir el fichero.\n" ); exit( 1 ); } printf( "Contenido del fichero:\n" ); letra=getc(fichero); while (feof(fichero)==0) { printf( "%c",letra ); letra=getc(fichero); } if (fclose(fichero)!=0) printf( "Problemas al cerrar el fichero\n" ); }
Comprobado con DJGPP
El puntero FILE *
Todas las funciones de estrada/salida estndar usan este puntero para conseguir informacin sobre el fichero abierto. Este puntero no apunta al archivo sino a una estructura que contiene informacin sobre l. Esta estructura incluye entre otras cosas informacin sobre el nombre del archivo, la direccin de la zona de memoria donde se almacena el fichero, tamao del buffer. Como dato curioso se adjunta la definicin de la estructura FILE definida en el fichero stdio.h: typedef struct { int _cnt; char *_ptr; char *_base; int _bufsiz; int _flag; int _file; char *_name_to_remove; int _fillsize; } FILE;
if (fichero==NULL) { printf( "No se puede abrir el fichero.\n" ); exit( 1 ); } Si fichero==NULL significa que no se ha podido abrir por algn error. Lo ms conveniente es salir del programa. Para salir utilizamos la funcin exit( 1 ), el 1 indica al sistema operativo que se han producido errores.
La segunda forma que comentaba arriba consiste en comprobar si el carcter ledo es el de fin de fichero EOF: while ( letra!=EOF ) Cuando trabajamos con ficheros de texto no hay ningn problema, pero si estamos manejando un fichero binario podemos encontrarnos EOF antes del fin de fichero. Por eso es mejor usar feof.
exit( 1 ); } printf( "Contenido del fichero:\n" ); fgets(texto,100,fichero); while (feof(fichero)==0) { printf( "%s",texto ); fgets(texto,100,fichero); } if (fclose(fichero)!=0) printf( "Problemas al cerrar el fichero\n" ); }
Comprobado con DJGPP
[Arriba]
fread
Esta funcin la vamos a tratar en un tema posterior junto con la funcin fwrite. Estas dos funciones permiten guardar y leer cualquier tipo de dato, incluso estructuras.
[Arriba]