Clase 27 Y 28: Manejo De Archivos En Lenguaje C - UNAM

Transcription

Los datos que hemos tratado hasta el momento hanresidido en la memoria principal. Sin embargo, lasgrandes cantidades de datos se almacenannormalmente en un dispositivo de memoriasecundaria. Estas colecciones de datos se conocencomo archivos. Un archivo es un conjunto de bits almacenado en undispositivo de memoria secundaria, el cuál puede seralmacenado con un conjunto de propiedades yrecuperado de la misma manera por el sistemaoperativo para que un programa tenga acceso a este.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezIntroducción3

Los archivos digitales se llaman así porque son losequivalentes digitales de los archivos en tarjetas,papel o microfichas del entorno de oficinatradicional.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínez Un archivo es identificado por un nombre y ladescripción de la carpeta o directorio que locontiene.4

Hay dos tipos de archivos, archivos de texto yarchivos binarios. Un archivo de texto es una secuencia de caracteresorganizadas en líneas terminadas por un carácterde nueva línea.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezTipos de archivos En estos archivos se pueden almacenar, fuentes deprogramas, texto plano, base de datos simples, etc. Los archivos de texto se caracterizan por ser planos,es decir, solo contienen caracteres de texto.5

El número de bytes escritos (leídos) será el mismoque los encontrados en el dispositivo externo. E.g. de estos archivos son Fotografías, icaciones), etc.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínez Un archivo binario es una secuencia de bytes quetienen una correspondencia uno a uno con undispositivo externo. Así que no tendrá lugarninguna traducción de caracteres.6

En C, un archivo es un concepto lógico que puedeaplicarse a muchas cosas desde archivos de discohasta terminales o una impresora. Para trabajar con un archivo se asocia unaestructura especial de tipo FILE con un archivoespecifico realizando una operación de apertura. Una vez que el archivo está abierto, la informaciónpuede ser intercambiada entre este y el programa.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezManejo de archivos en C7

La tabla siguiente da un breve resumen de lasfunciones que se pueden utilizar.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínez Se puede conseguir la entrada y la salida de datos aun archivo a través del uso de la biblioteca defunciones estándar "stdio.h"; C puro no tienepalabras claves que realicen las operaciones de E/S. Observe que la mayoría de las funciones comienzancon la letra “f” (file), esto es un vestigio del estándar Cde Unix.8

Funciónfopen()Abre un archivofclose()Cierra un archivofgets()Lee una cadena de un archivofputs()Escribe una cadena de un archivofseek()Busca un byte especifico de un archivofprintf()Escribe una salida con formato en el archivofscanf()Lee una entrada con un formato en el archivofeof()Devuelve cierto si se llega al final del archivoferror()Devuelve cierto si se produce un errorrewind()Coloca el cursor de posición en el archivo al principio del mismoremove()Borra un archivofflush()Vacía un archivofread()Lee un bloque de una “stream” de datos (binario)fwrite()Escribe un bloque de datos a un archivo como “stream” (binario)Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezNombre9

Un puntero a un archivo es un puntero a unainformación que define varias cosas sobre él,incluyendo el nombre, el estado y la posición actualdel archivo. En esencia identifica un archivo especifico y utilizala secuencia asociada para dirigir el funcionamientode las funciones de E/S con buffer.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezEl puntero a un archivo. El puntero a un archivo es un tipo especial queopera como hilo común que unifica el sistema deE/S con buffer.10

Un puntero a un archivo es una variable de tipopuntero al tipo FILE que se define en "stdio.h". Un programa necesita utilizar punteros a archivospara leer o escribir en los mismos. Para obtener unavariable de este tipo se utiliza una secuencia comoesta:Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínez El puntero a un archivo.FILE *F;11

FILE * fopen (const char nombre archivo, const char modo); Donde nombre archivo es un puntero a una cadenade caracteres que representan un nombre valido delarchivo y puede incluir una especificación deldirectorio. La cadena a la que apunta modo determina como seabre el archivo.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezApertura de un archivo La función fopen() abre una secuencia para quepueda ser utilizada y la asocia a un archivo. Suprototipo es:12

ModoSignificadorAbre un archivo de texto para lectura (read)wAbre un archivo de texto para escritura desde el comienzo (write)aAbre un archivo de texto para escritura al final del archivo (append)rbAbre un archivo binario para lectura (read binary)wbAbre un archivo de binario para escritura desde el comienzo (write binary)abAbre un archivo binario para escritura al final del archivo (append binary)r Abre o crea un archivo de texto para lectura / escrituraw Crea un archivo de texto para lectura / escrituraa Añade o crea un archivo de texto para lectura / escriturarb Abre o crea un archivo binario para lectura / escriturawb Crea un archivo binario para lectura / escrituraab Añade o crea un archivo binario para lectura / escrituraClase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezModos de apertura de un archivo13

La función fopen() devuelve un puntero a archivo. Unprograma nunca debe alterar el valor de ese puntero. Si se produce un error cuando se esta intentando abrirun archivo, fopen() devuelve un puntero nulo (NULL).Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezAbrir un archivo - fopen() Se puede abrir un archivo bien en modo texto o binario.En la mayoría de las implementaciones, en modo texto,la secuencias de retorno de carro / salto de línea seconvierten a caracteres de salto de línea en lectura.14

En la escritura, ocurre lo contrario: los caracteres de salto delínea se convierten en salto de línea. Estas conversiones noocurren en archivos binarios. La macro NULL está definida en "stdio.h". La función fopen()detecta cualquier error al abrir un archivo: como por ejemplodisco lleno o protegido contra escritura antes de comenzar aescribir en él.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínez Abrir un archivo - fopen() Si se usa fopen() para abrir un archivo para escritura,entonces cualquier archivo existente con el mismo nombre seborrará y se crea uno nuevo.15

Si se quiere añadir al final del archivo entonces debe usar elmodo a. Si se usa a y no existe el archivo, se devolverá unerror. La apertura de un archivo para las operaciones de lecturarequiere que exista el archivo. Si no existe, fopen() devolveráun error.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínez Abrir un archivo - fopen() " " abre un archivo para las operaciones de leer / escribir, elsistema operativo no lo borrará si existe; sin embargo, si noexiste, el sistema operativo lo creará.16

La función fclose() cierra una secuencia que fueabierta mediante una llamada a fopen(). Escribetoda la información que todavía se encuentre en elbuffer en el disco y realiza un cierre formal delarchivo a nivel del sistema operativo.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezCierre de un archivo - fclose() Un error en el cierre de una secuencia puedegenerar todo tipo de problemas, incluyendo lapérdida de datos, destrucción de archivos y posibleserrores intermitentes en el programa.17

Donde F es el puntero al archivo devuelto por lallamada a fopen(). Si se devuelve un valor cerosignifica que la operación de cierre ha tenido éxito. Generalmente, esta función solo falla cuando undisco se ha retirado antes de tiempo o cuando noqueda espacio libre en el mismo.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínez Cierre de un archivo.int fclose(FILE *F);18

Para introducir u obtener datos en modo texto de un archivotenemos las siguientes cuatro funciones: fprintf()fscanf()fgets()fputs()Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezManejo de archivos en C (Modo texto) Estas funciones se comportan exactamente como prinft() yscanf(), gets() y puts() excepto que operan sobre archivo. Susprototipos son:int fprintf(FILE *F, const char *cadena de control, .);int fscanf(FILE *F, const char *cadena de control, .);char *fputs(char *str, FILE *F);char *fgets(char *str, int long, FILE *F);19

Desgraciadamente esta es la forma más compleja dealmacenar registros e información así como recuperarla porparte de aplicaciones profesionales, por ello no esrecomendable trabajar solo con el modo texto.Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínez El operar con los archivos en modo texto facilita lacomprensión de los archivos por cualquier usuario que logreabrir el archivo con otra aplicación que permita leer el textoclaro. El modo binario permite un almacenamiento mucho másseguro, fiable y fácil de manejar (si se diseña correctamentela aplicación).20

Para introducir u obtener datos en modo binario de unarchivo tenemos las siguientes funciones: fread() fwrite() Sus prototipos son:Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezManejo de archivos en C (Modo binario)size t fread ( void * ptr, size t size, size t count, FILE * archivo);size t fwrite(void *ptr, size t tamano, size t count, FILE * archivo);21

Esta función lee un bloque de una "stream" de datos. Efectúala lectura de un arreglo de elementos "count", cada uno de loscuales tiene un tamaño definido por "size". Luego los guardaen el bloque de memoria especificado por "ptr". El indicadorde posición de la cadena de caracteres avanza hasta leer latotalidad de bytes. Si esto es exitoso la cantidad de bytesleídos es (size*count).Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínezfread()size t fread ( void * ptr, size t size, size t count, FILE * archivo);22

ptr: Puntero a un bloque de memoria con un tamañomínimo de (size*count) bytes. size: Tamaño en bytes de cada elemento (de los que se van aleer). count : Número de elementos, los cuales tienen un tamaño"size".Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínezsize t fread ( void * ptr, size t size, size t count, FILE * archivo); archivo: Puntero a FILE, que especifica el archivo de entrada.23

Esta función está pensada para trabajar con registros delongitud constante y forma pareja con fread. Es capaz de escribir hacia un fichero uno o varios registros dela misma longitud almacenados a partir de una dirección dememoria determinada. El valor de retorno es el número deregistros escritos, no el número de bytes. Los parámetros son:un puntero a la zona de memoria de donde se obtendrán losdatos a escribir, el tamaño de cada registro, el número deregistros a escribir y un puntero FILE del fichero al que se harála escritura.size t fwrite(void *ptr, size t tamano, size t count, FILE * archivo);Clase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco Martínezfwrite()24

(Manejo del desplazamiento sobre el archivo)fseek() Esta función está sitúa el puntero (cursor) de un archivo enuna posición deseada, trabaja para modo binario y texto.int fseek(FILE *archivo, long offset, int origen); archivo es un puntero a la estructura del archivo offset es un entero largo que especifica el número de bytes de origen,donde se colocará el cursor. origen es un número entero que especifica la posición de origen.Puede ser: SEEK SET: El origen es el comienzo del archivo SEEK CUR: El origen es la posición actual SEEK END: El origen es el final del archivoClase 27 y 28: Manejo de archivos en lenguaje CAlgoritmia y programación estructuradaProf. Edgardo Adrián Franco MartínezManejo de archivos en C25

Manejo de archivos en C En C, un archivo es un concepto lógico que puede aplicarse a muchas cosas desde archivos de disco hasta terminales o una impresora. Para trabajar con un archivo se asocia una estructura especial de tipo FILE con un archivo especifico realizando una operación de apertura. Una vez que el archivo está abierto .