You are on page 1of 23

Los datos que hemos tratado hasta el momento han

residido en la memoria principal. Sin embargo, las


grandes cantidades de datos se almacenan
normalmente en un dispositivo de memoria
secundaria. Estas colecciones de datos se conocen
como archivos.
Un archivo es un conjunto de bits almacenado en un
dispositivo de memoria secundaria, el cul puede ser
almacenado con un conjunto de propiedades y
recuperado de la misma manera por el sistema
operativo para que un programa tenga acceso a este.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Introduccin

Los archivos digitales se llaman as porque son los


equivalentes digitales de los archivos en tarjetas,
papel o microfichas del entorno de oficina
tradicional.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Un archivo es identificado por un nombre y la


descripcin de la carpeta o directorio que lo
contiene.

Hay dos tipos de archivos, archivos de texto y


archivos binarios.
Un archivo de texto es una secuencia de caracteres
organizadas en lneas terminadas por un carcter
de nueva lnea.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Tipos de archivos

En estos archivos se pueden almacenar, fuentes de


programas, texto plano, base de datos simples, etc.
Los archivos de texto se caracterizan por ser planos,
es decir, solo contienen caracteres de texto.

El nmero de bytes escritos (ledos) ser el mismo


que los encontrados en el dispositivo externo.
E.g. de estos archivos son Fotografas, imgenes,
texto
con
formatos,
archivos
ejecutables
(aplicaciones), etc.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Un archivo binario es una secuencia de bytes que


tienen una correspondencia uno a uno con un
dispositivo externo. As que no tendr lugar
ninguna traduccin de caracteres.

En C, un archivo es un concepto lgico 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 operacin de apertura.
Una vez que el archivo est abierto, la informacin
puede ser intercambiada entre este y el programa.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Manejo de archivos en C

La tabla siguiente da un breve resumen de las


funciones que se pueden utilizar.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Se puede conseguir la entrada y la salida de datos a


un archivo a travs del uso de la biblioteca de
funciones estndar "stdio.h"; C puro no tiene
palabras claves que realicen las operaciones de E/S.

Observe que la mayora de las funciones comienzan


con la letra f (file), esto es un vestigio del estndar C
de Unix.
8

Funcin

fopen()

Abre un archivo

fclose()

Cierra un archivo

fgets()

Lee una cadena de un archivo

fputs()

Escribe una cadena de un archivo

fseek()

Busca un byte especifico de un archivo

fprintf()

Escribe una salida con formato en el archivo

fscanf()

Lee una entrada con un formato en el archivo

feof()

Devuelve cierto si se llega al final del archivo

ferror()

Devuelve cierto si se produce un error

rewind()

Coloca el cursor de posicin en el archivo al principio del mismo

remove()

Borra un archivo

fflush()

Vaca un archivo

fread()

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 C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Nombre

Un puntero a un archivo es un puntero a una


informacin que define varias cosas sobre l,
incluyendo el nombre, el estado y la posicin actual
del archivo.
En esencia identifica un archivo especifico y utiliza
la secuencia asociada para dirigir el funcionamiento
de las funciones de E/S con buffer.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

El puntero a un archivo.
El puntero a un archivo es un tipo especial que
opera como hilo comn que unifica el sistema de
E/S con buffer.

10

Un puntero a un archivo es una variable de tipo


puntero al tipo FILE que se define en "stdio.h".
Un programa necesita utilizar punteros a archivos
para leer o escribir en los mismos. Para obtener una
variable de este tipo se utiliza una secuencia como
esta:

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

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 cadena


de caracteres que representan un nombre valido del
archivo y puede incluir una especificacin del
directorio.
La cadena a la que apunta modo determina como se
abre el archivo.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Apertura de un archivo
La funcin fopen() abre una secuencia para que
pueda ser utilizada y la asocia a un archivo. Su
prototipo es:

12

Modo

Significado

Abre un archivo de texto para lectura (read)

Abre un archivo de texto para escritura desde el comienzo (write)

Abre un archivo de texto para escritura al final del archivo (append)

rb

Abre un archivo binario para lectura (read binary)

wb

Abre un archivo de binario para escritura desde el comienzo (write binary)

ab

Abre un archivo binario para escritura al final del archivo (append binary)

r+

Abre o crea un archivo de texto para lectura / escritura

w+

Crea un archivo de texto para lectura / escritura

a+

Aade o crea un archivo de texto para lectura / escritura

rb+

Abre o crea un archivo binario para lectura / escritura

wb+

Crea un archivo binario para lectura / escritura

ab+

Aade o crea un archivo binario para lectura / escritura

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Modos de apertura de un archivo

13

La funcin fopen() devuelve un puntero a archivo. Un


programa nunca debe alterar el valor de ese puntero.
Si se produce un error cuando se esta intentando abrir
un archivo, fopen() devuelve un puntero nulo (NULL).

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Abrir un archivo - fopen()

Se puede abrir un archivo bien en modo texto o binario.


En la mayora de las implementaciones, en modo texto,
la secuencias de retorno de carro / salto de lnea se
convierten a caracteres de salto de lnea en lectura.
14

En la escritura, ocurre lo contrario: los caracteres de salto de


lnea se convierten en salto de lnea. Estas conversiones no
ocurren en archivos binarios.
La macro NULL est definida en "stdio.h". La funcin fopen()
detecta cualquier error al abrir un archivo: como por ejemplo
disco lleno o protegido contra escritura antes de comenzar a
escribir en l.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Abrir un archivo - fopen()

Si se usa fopen() para abrir un archivo para escritura,


entonces cualquier archivo existente con el mismo nombre se
borrar y se crea uno nuevo.
15

Si se quiere aadir al final del archivo entonces debe usar el


modo a. Si se usa a y no existe el archivo, se devolver un
error.
La apertura de un archivo para las operaciones de lectura
requiere que exista el archivo. Si no existe, fopen() devolver
un error.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Abrir un archivo - fopen()

"+" abre un archivo para las operaciones de leer / escribir, el


sistema operativo no lo borrar si existe; sin embargo, si no
existe, el sistema operativo lo crear.
16

La funcin fclose() cierra una secuencia que fue


abierta mediante una llamada a fopen(). Escribe
toda la informacin que todava se encuentre en el
buffer en el disco y realiza un cierre formal del
archivo a nivel del sistema operativo.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Cierre de un archivo - fclose()

Un error en el cierre de una secuencia puede


generar todo tipo de problemas, incluyendo la
prdida de datos, destruccin de archivos y posibles
errores intermitentes en el programa.
17

Donde F es el puntero al archivo devuelto por la


llamada a fopen(). Si se devuelve un valor cero
significa que la operacin de cierre ha tenido xito.
Generalmente, esta funcin solo falla cuando un
disco se ha retirado antes de tiempo o cuando no
queda espacio libre en el mismo.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Cierre de un archivo.
int fclose(FILE *F);

18

Para introducir u obtener datos en modo texto de un archivo


tenemos las siguientes cuatro funciones:

fprintf()
fscanf()
fgets()
fputs()

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Manejo de archivos en C (Modo texto)

Estas funciones se comportan exactamente como prinft() y


scanf(), gets() y puts() excepto que operan sobre archivo. Sus
prototipos 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 ms compleja de


almacenar registros e informacin as como recuperarla por
parte de aplicaciones profesionales, por ello no es
recomendable trabajar solo con el modo texto.

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

El operar con los archivos en modo texto facilita la


comprensin de los archivos por cualquier usuario que logre
abrir el archivo con otra aplicacin que permita leer el texto
claro.

El modo binario permite un almacenamiento mucho ms


seguro, fiable y fcil de manejar (si se disea correctamente
la aplicacin).
20

Para introducir u obtener datos en modo binario de un


archivo tenemos las siguientes funciones:
fread()
fwrite()

Sus prototipos son:

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Manejo 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 funcin lee un bloque de una "stream" de datos. Efecta


la lectura de un arreglo de elementos "count", cada uno de los
cuales tiene un tamao definido por "size". Luego los guarda
en el bloque de memoria especificado por "ptr". El indicador
de posicin de la cadena de caracteres avanza hasta leer la
totalidad de bytes. Si esto es exitoso la cantidad de bytes
ledos es (size*count).

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

fread()

size_t fread ( void * ptr, size_t size, size_t count, FILE * archivo);

22

ptr: Puntero a un bloque de memoria con un tamao


mnimo de (size*count) bytes.
size: Tamao en bytes de cada elemento (de los que se van a
leer).
count : Nmero de elementos, los cuales tienen un tamao
"size".

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

size_t fread ( void * ptr, size_t size, size_t count, FILE * archivo);

archivo: Puntero a FILE, que especifica el archivo de entrada.


23

Esta funcin est pensada para trabajar con registros de


longitud constante y forma pareja con fread.
Es capaz de escribir hacia un fichero uno o varios registros de
la misma longitud almacenados a partir de una direccin de
memoria determinada. El valor de retorno es el nmero de
registros escritos, no el nmero de bytes. Los parmetros son:
un puntero a la zona de memoria de donde se obtendrn los
datos a escribir, el tamao de cada registro, el nmero de
registros 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 C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

fwrite()

24

(Manejo del desplazamiento sobre el archivo)


fseek()
Esta funcin est sita el puntero (cursor) de un archivo en
una posicin 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 nmero de bytes de origen,
donde se colocar el cursor.
origen es un nmero entero que especifica la posicin de origen.
Puede ser:
SEEK_SET: El origen es el comienzo del archivo
SEEK_CUR: El origen es la posicin actual
SEEK_END: El origen es el final del archivo

Clase 27 y 28: Manejo de archivos en lenguaje C


Algoritmia y programacin estructurada
Prof. Edgardo Adrin Franco Martnez

Manejo de archivos en C

25

You might also like