Está en la página 1de 58

Programacin I

Unidad 4: Archivos
Operaciones,
Funciones
de
apertura, lectura, escritura y cierre
de archivos
Ing. Margarita Aucancela Msc.
Docente
maucancela@unach.edu.ec

Escuela de Ingeniera en Sistemas y Computacin

Objetivo: Utilizar con eficiencia un


conjunto completo de funciones de
entrada y salida con archivos para
determinar el tipo de archivo ms
adecuado una solucin particular.

Programacin I

Ing. Margarita Aucancela Msc.

Escuela de Ingeniera en Sistemas y Computacin

ndice
Introduccin

Definiciones bsicas.
Operaciones Bsicas de manejo de Archivos
Funciones de Escritura y lectura en archivos de

cualquier tipo de dato

Programacin I

Ing. Margarita Aucancela Msc.

Escuela de Ingeniera en Sistemas y Computacin

Introduccin
En esta parte, se van a mostrar aquellas funciones que permiten a un
programa comunicarse con los dispositivos de almacenamiento secundario
(discos fijos, discos removibles...) y a la vez, guardar datos en estos
dispositivos de forma permanente para as poder recuperarlos cuando se

los requiera. Con ello obtendremos las siguientes ventajas:


Capacidad de procesar una gran cantidad de datos

Disponibilidad de los datos almacenados en cualquier momento que nos


sean necesarios.
Almacenamiento temporal de parte de los datos que necesita un
programa para trabajar.
Programacin I

Ing. Margarita Aucancela Msc.

Escuela de Ingeniera en Sistemas y Computacin

Definiciones bsicas

Nota: El acceso a los archivos se hace con un buffer intermedio.


Programacin I

Ing. Margarita Aucancela Msc.

Escuela de Ingeniera en Sistemas y Computacin

Definiciones bsicas
Un flujo (stream) es una abstraccin que se refiere a un flujo o
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 conexin o canal (<<pipe>>) por la que circulen los

datos. La apertura de un archivo supone establecer la conexin del


programa con el dispositivo que contiene al archivo, por el canal que

comunica el archivo con el programa van a fluir las secuencias de


datos.
Programacin I

Ing. Margarita Aucancela Msc.

Escuela de Ingeniera en Sistemas y Computacin

Definiciones bsicas
Hay tres flujos o canales abiertos automticamente:
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
Estas tres variables se inicializan al comenzar la ejecucin del
programa para admitir secuencias de caracteres, en modo texto. Su
cometido es el siguiente:
stdin: asocia la entrada estndar (teclado) con el programa
stdout: asocia la salida estndar (pantalla) con el programa
stderr: asocia la salida de mensajes de error (pantalla) con el
programa
As cuando se ejecuta printf(Calle Mayor 2); se escribe en stdout, en
pantalla; si se desea leer una variable entera con scanf(d,&x); se
captan los dgitos de la secuencia de entrada stdin.
Programacin I

Ing. Margarita Aucancela Msc.

Escuela de Ingeniera en Sistemas y Computacin

Definiciones bsicas
Archivo o fichero: Cualquier conjunto de datos almacenado en un
dispositivo de almacenamiento secundario, independientemente de

la informacin que represente (programas, textos, grficos ...), est


agrupado un una estructura de datos llamada fichero o archivo.
Un archivo o fichero es una cadena de bytes consecutivos terminada
por una carcter especial llamado EOF (End Of File ), y nos servir
para el almacenamiento permanente de grandes cantidades de
datos.

Programacin I

Ing. Margarita Aucancela Msc.

Escuela de Ingeniera en Sistemas y Computacin

Definiciones bsicas

Es responsabilidad de los programas o aplicaciones interpretar dicha


cadena de bytes de manera adecuada para trabajar con la
informacin que representa. Por ejemplo, el sistema operativo MSDOS reconoce que la informacin almacenada en un archivo es un

programa porque el nombre del archivo lleva la extensin .EXE.


Programacin I

Ing. Margarita Aucancela Msc.

Escuela de Ingeniera en Sistemas y Computacin

Definiciones bsicas
Desde el punto de vista del programador, los archivos hay que verlos
como cadenas de bits (0 o 1) agrupados en bytes consecutivos, de
los cuales, el ltimo, es un carcter especial (EOF) que indica que no
existen ms bytes a partir de l (los bytes pueden representar
nmeros enteros, nmeros reales, caracteres, direcciones de
memoria ...).
NOTA: Los conceptos de archivo y fichero son equivalentes.

Existen bsicamente dos formas en las que la informacin puede ser


almacenada(codificada) en un archivo:
Como caracteres de texto Archivos de texto
Como informacin binaria Archivos binaria
En ambos casos, los archivos son cadenas de bytes terminadas por
el carcter EOF.
Programacin I

Ing. Margarita Aucancela Msc.

10

Escuela de Ingeniera en Sistemas y Computacin

Definiciones bsicas
Los archivos vienen identificados por un nombre, que a de tener un
mximo de 64 caracteres y una extensin, separada del nombre por
un punto, que es opcional y ha de tener un mximo de 3 caracteres.
Adems, es posible especificar el dispositivo (disco) en el cual est y

el camino de acceso a dicho archivo a travs de los directorios. Esta


forma de identificar los archivos es la utilizada en la lnea de

comandos del intrprete de rdenes de MS-DOS:


[Dispositivo: ]Nombre[ .EXT]
Por ejemplo:

C:\PROGRAMACION Informe.pdf
Programacin I

Ing. Margarita Aucancela Msc.

11

Escuela de Ingeniera en Sistemas y Computacin

Definiciones bsicas

En UNIX, existe ms libertad para elegir el nombre de un fichero ya


que permite utilizar nombres de fichero de hasta 64 caracteres y no

hay que especificar dispositivo alguno, pero dentro del programa se


identifican de igual forma que en la lnea de comandos del
intrprete de UNIX.

Programacin I

Ing. Margarita Aucancela Msc.

12

Escuela de Ingeniera en Sistemas y Computacin

Actividad:
Responda: Cul o cules son las
diferencias entre un archivo de texto
y un archivo binario?
Programacin I

Ing. Margarita Aucancela Msc.

13

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Puntero FILE
Los archivos se ubican en dispositivos externos como cintas,
cartuchos, discos, disco compactos, etc. y tienen un nombre y unas
caractersticas. En el programa el archivo tiene un nombre interno
que es un puntero a una estructura predefinida (puntero a archivo).
La siguiente estructura contiene informacin sobre el archivo, tal

como la direccin del buffer que utiliza, el modo de apertura del


archivo, el ltimo carcter ledo del buffer y otros detalles que

generalmente el usuario no necesita saber.


Programacin I

Ing. Margarita Aucancela Msc.

14

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Puntero FILE
El identificador del tipo de la estructura es FILE y esta declarada en el

archivo de cabecera stdio. h:


typedef struct
{
short level;
unsigned flags;/*estado del archivo: lectura, binario ... */
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer, *curp;
unsigned istemp;
short token;
}
FILE;
Programacin I

Ing. Margarita Aucancela Msc.

15

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Nota
El detalle de los campos del tipo FILE puede cambiar de un

compilador a otro. Al programador le interesa saber que existe el


tipo FILE y que es necesario definir un puntero a FILE por cada

archivo a procesar. Muchas de las funciones para procesar archivos


son del tipo FILE *, y tienen argumento(s) de ese tipo.

Programacin I

Ing. Margarita Aucancela Msc.

16

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas de manejo de


archivos
Ejemplo

Se declara un puntero a FILE; se escribe el prototipo de una funcin

de tipo puntero a FILE y con un argumento al mismo tipo.

FILE * pf;

FILE * mostrar(FILE *)

Cabe recordar que la entrada estndar al igual que la salida estn


asociadas a variables puntero a FILE;

Programacin I

FILE *stdin, stout;

Ing. Margarita Aucancela Msc.

17

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Apertura de un archivo

Para procesar un archivo, en todos los lenguajes, no solo en C, la


primera operacin a realizar es abrir el archivo. La apertura del
archivo supone conectar el archivo externo con el programa, e

indicar cmo va a ser tratado el archivo: binario, de caracteres, etc.


El programa accede a los archivos a travs de un puntero a la

estructura FILE, la funcin de apertura devuelve dicho puntero.

Programacin I

Ing. Margarita Aucancela Msc.

18

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
La funcin para abrir un archivo es fopen ( ) y el formato de llamada
es:

fopen(nombre_archivo, modo);
nombre_archivo = cadena: Contiene el identificador externo
del archivo.

modo = cadena : Contiene el modo en que se va a tratar el


archivo.
La funcin devuelve un puntero a FILE, a travs de dicho puntero el

programa hace referencia al archivo. La llamada a fopen( ) se debe de


hacer de tal forma que el valor que devuelve se asigne a una variable

puntero a FILE, para as despus referirse a dicha variable.


Programacin I

Ing. Margarita Aucancela Msc.

19

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas de manejo de


archivos
Ejemplo: Apertura de un archivo
Se desea abrir un archivo de nombre LICENCIA.EST para obtener
ciertos datos.
#include <stdio.h>
#include <stdlib.h>
using namespace std;
FILE *pf;
char nm[ ] = C:\LICENCIA:EST;
pf = fopen(nm,r);
if (pf==NULL)
{
puts(Error al abrir el archivo);
exit(-1);
}
Programacin I

Ing. Margarita Aucancela Msc.

20

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Modos de apertura de un archivo
Al abrir el archivo fopen() se espera como segundo argumento el

modo de tratar el archivo. Los modos bsicos se expresan en esta


tabla:
Modo

Significado

Abre el archivo para lectura. El archivo debe existir.

Abre el archivo para escritura. Los datos se escriben desde el principio. Si el


archivo no existe, se crea.

Abre el archivo para aadir datos al final del mismo. Si el archivo no existe, se
crea.

r+

Abre el archivo para lectura y escritura. Los datos se escriben desde el principio y
el archivo debe existir.

w+

Abre el archivo para lectura y escritura. Los datos se escriben desde el principio y
si el archivo no existe se crea. (si ya existe se pierden los datos)

a+

Abre el archivo para lectura y para aadir datos al final del mismo. Si el archivo no
Programacin I
21
existe, se crea. Si no existeIng.esMargarita
comoAucancela
w+ Msc.

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas

Por defecto el tipo de archivos a ser utilizados son


en modo texto y para no depender del entorno se
utiliza, la letra t para modo texto y la b para modo
binario. As los modos de abrir un archivo de texto
son:

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


Y los modos para abrir un archivo binario son:

rb, wb, at, r+b, w+b, a+b


Programacin I

Ing. Margarita Aucancela Msc.

22

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Ejemplo:
Se dispone de un archivo de texto LICENCIA.EST, se quiere leerlo para
realizar un cierto proceso y escribir datos resultantes en el archivo
binario RESUMEN.REC. Las operaciones de apertura son:
#include <stdio.h>
#include <stdlib.h>
char org[ ]=C:\LICENCIA.EST;
char dst[ ]=C:\RESUMEN.REC;
pf1 = fopen(org, rt);
pf2=fopen(dst,wb);
if (pf1==NULL || pf2==NULL)
puts Error al abrir los archivos;
exit(1);
}
Programacin I

Ing. Margarita Aucancela Msc.

23

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
NULL : Cuando las funciones de biblioteca que devuelven un puntero
(strcpy( ), fopen( ) ...), especifican que no se puede realizar la
operacin, es decir que generalmente hay un error.
Esta es una macro definida en varios archivos de cabecera, entre los
que se encuentran stdio.h y stdlib. h .
EOF: Cuando las funciones de librera de E/S de archivos,
generalmente empiezan por f de file, tienen especificado que son de

tipo entero de tal forma que si la operacin falla devuelven EOF,


tambin devuelven EOF para indicar que se ha ledo el fin de archivo.

Esta macro est definida en stdio . h .


Programacin I

Ing. Margarita Aucancela Msc.

24

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
NULL : Cuando las funciones de biblioteca que devuelven un puntero
(strcpy( ), fopen( ) ...), especifican que no se puede realizar la
operacin, es decir que generalmente hay un error.
Esta es una macro definida en varios archivos de cabecera, entre los
que se encuentran stdio.h y stdlib. h .
EOF: Cuando las funciones de librera de E/S de archivos,
generalmente empiezan por f de file, tienen especificado que son de

tipo entero de tal forma que si la operacin falla devuelven EOF,


tambin devuelven EOF para indicar que se ha ledo el fin de archivo.

Esta macro est definida en stdio . h .


Programacin I

Ing. Margarita Aucancela Msc.

25

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Cierre de archivos
Los archivos trabajan con una memoria intermedia, son con buffer. La
entrada y salida de datos se almacena en ese buffer, volcndose

cuando est lleno. Al terminar la ejecucin del programa podr ocurrir


que haya datos en el buffer, si no se volcasen en el archivo quedara

este sin las ltimas actualizaciones. Siempre que se termina de


procesar un archivo y siempre que se termine la ejecucin del

programa los archivos abiertos hay que cerrarlos para que entre otras
acciones se vuelque el buffer.

Programacin I

Ing. Margarita Aucancela Msc.

26

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Cierre de archivos
Los archivos trabajan con una memoria intermedia, son con buffer. La
entrada y salida de datos se almacena en ese buffer, volcndose

cuando est lleno. Al terminar la ejecucin del programa podr ocurrir


que haya datos en el buffer, si no se volcasen en el archivo quedara

este sin las ltimas actualizaciones. Siempre que se termina de


procesar un archivo y siempre que se termine la ejecucin del

programa los archivos abiertos hay que cerrarlos para que entre otras
acciones se vuelque el buffer.

Programacin I

Ing. Margarita Aucancela Msc.

27

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Cierre de archivos
La funcin fclose (puntero_file) cierra el archivo asociado al
puntero_file, devuelve EOF si ha habido un error al cerrar. El prototipo
de la funcin se encuentra en stdio.h y es:
int fclose(FILE* pf);
Ejemplo
Abrir dos archivos de texto, despus se cierra cada uno de ellos.
#include <stdio.h>
FILE *pfl, *pf2;
pfl = fopen(C:\DATOS.DAT", "a+")
pf2 = fopen("C:\TEMPS.RET","b+")
fclose(pf1);
fclose(pf2);

Programacin I

Ing. Margarita Aucancela Msc.

28

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas

Programacin I

Ing. Margarita Aucancela Msc.

29

Escuela de Ingeniera en Sistemas y Computacin

Operaciones bsicas
Respecto a esta tabla habra que hacer algunas consideraciones:
Las lecturas slo podrn hacerse desde el principio del archivo,
mientras que las escrituras podrn hacerse desde el principio

(modos "w", "w+") o aadiendo datos al final (modos "a", "a+").


La funcin fopen puede dar error por intentar abrir un fichero que

no existe mediante "r" o "r+", por no existir espacio en disco para


crear archivo... En estos casos, fopen devuelve NULL. Habr que

intentar comprobar si se ha producido error en la apertura del


archivo (lo veremos ms adelante).

Programacin I

Ing. Margarita Aucancela Msc.

30

Escuela de Ingeniera en Sistemas y Computacin

Creacin de un archivo secuencial


Una vez abierto un archivo para almacenar datos hay que grabarlos en
el mismo. Las funciones de entrada y de salida de archivos tienen
mucho parecido con las funciones utilizadas para entrada y salida para
los flujos stdin (teclado) y stdout (pantalla): printf (), scanf (), getchar(),
putchar( ), gets( ) y puts( ). Todas tienen una versin para archivos que
empieza por la letra f, as se tiene fprintf ( ), fscanf ( ), fputs (), fgets () ;

la mayora de las funciones especficas de archivos empiezan con f.


Programacin I

Ing. Margarita Aucancela Msc.

31

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura: datos


tipo carcter
Un carcter puede ser ledo de un archivo, mediante la funcin getc:

int getc(FILE *pf)


La funcin getc tiene como nico argumento, el puntero al archivo pf
y devuelve el carcter ledo del fichero en forma de entero sin signo,
en vista de que la conversin a carcter se la realizar
automticamente.
Tras la apertura del archivo de acceso secuencial, el carcter devuelto
por getc ser el primer carcter del archivo, si se vuelve a utilizar la
funcin getc, cada vez que se lee(del archivo) o escribe(en pantalla),
el carcter devuelto ser el siguiente y as sucesivamente.
Veamos un ejemplo.
Programacin I

Ing. Margarita Aucancela Msc.

32

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura: datos tipo


carcter
En este ejemplo se requiere leer cinco caracteres de un archivo de texto
mediante la funcin getc:

Programacin I

Ing. Margarita Aucancela Msc.

33

Escuela de Ingeniera en Sistemas y Computacin

NOTA: Este programa podra dar error si el fichero no tuviera


tantos caracteres, es decir, si la lectura alcanzase el carcter de fin
de fichero (EOF).

Veamos ahora como podemos leer todos los caracteres de un


archivo de texto mediante la funcin getc.

Programacin I

Ing. Margarita Aucancela Msc.

34

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura


Se hace una lectura de todo el archivo, sea cual sea el nmero de
caracteres y se muestra por pantalla. En la ltima iteracin del bucle
el descriptor de archivo (pf) apunta a EOF, carcter que devolver
evalundose a 0 la condicin del bucle.
De la misma manera que se leen los caracteres de un archivo uno a
uno, se pueden escribir en l mediante la funcin putc:

int putc(int c, FILE *pf)


El primer argumento de putc es el carcter a escribir en el archivo,
mientras que el segundo argumento es el puntero al archivo. Si la
escritura es correcta, putc devuelve el carcter escrito, devolviendo
EOF en caso contrario.
Veamos un ejemplo
Programacin I

Ing. Margarita Aucancela Msc.

35

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura


En este ejemplo, se escribe una cadena de caracteres en una archivo
de texto mediante putc:

Al cerrar el fichero se inserta el carcter EOF y se libera la variable pf.


Programacin I

Ing. Margarita Aucancela Msc.

36

Escuela de Ingeniera en Sistemas y Computacin

Actividad:
Crear un fichero que se llame: frase.dat y almacenar la siguiente
frase:

Programacin I

Ing. Margarita Aucancela Msc.

37

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura


Para leer un conjunto de caracteres(ya no solo uno), se utilizan dos
funciones anlogas a scanf y printf: fscanf y fprintf.
La diferencia entre ellas, es que el primer argumento es un puntero al
archivo, tanto para la entrada y salida del archivo. La sintaxis de ambas es:

int fscanf (FILE *pf, char *format, [pointer, ] );


int fprintf (FILE *pf, char *format, [arg, ] );
donde:
pf es el descriptor de fichero.
format es la cadena de caracteres a leer o a escribir.
[pointer, ] representa la lista opcional de punteros a variables donde se
almacenarn los datos ledos y que vienen especificados en la cadena
format.
[arg, ] representa la lista opcional de variables cuyos valores se van a
escribir en el fichero, tambin especificados en format.
Programacin I

Ing. Margarita Aucancela Msc.

38

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura


La funcin fscanf devuelve el nmero de items ledos o EOF si se llega al
final del fichero, mientras que fprintf devuelve el nmero de bytes
escritos en el fichero o un nmero negativo en caso de error.
El funcionamiento de fscanf es exactamente igual al de scanf (puede leer
cadenas separadas por espacios y otros caracteres especiales). De la
misma manera el funcionamiento de fprintf es el mismo que el de printf
(escribe la cadena hasta encontrar el retorno de carro o el final de la
cadena).
Veamos un ejemplo.

Programacin I

Ing. Margarita Aucancela Msc.

39

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura


Este ejemplo de escritura en un fichero de texto de una cadena de
caracteres (puede contener blancos) mediante la funcin fprintf:

Programacin I

Ing. Margarita Aucancela Msc.

40

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura


Veamos un ejemplo en el que se lee una cadena de caracteres de un
archivo de texto mediante la funcin fscanf. Supondremos que la ciudad
que se introduce por teclado, es almacenada en el fichero "FICHERO.DAT",
para posteriormente ser ledo con fscanf:
NOTA: Comprobar que el programa no permite leer cadenas separadas
por espacios.

Programacin I

Ing. Margarita Aucancela Msc.

41

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura

Programacin I

Ing. Margarita Aucancela Msc.

42

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura


Si quisiramos leer cadenas completas de caracteres incluidos los blancos
con la funcin fscanf, abra que colocar la funcin dentro de un bucle.
Veamos un ejemplo:
include <stdio.h>
main ( ) {
FILE *pf;
char vector[50];
..........
pf = fopen(''FICHERO.DAT'', ''r'');
while ( fscan(pf, ''%s'', vector) !=
EOF )
printf(''%s'', vector);
fclose(pf);
printf( );
}

Declaramos variable a FILE.


Declaramos array de 50
caracteres.
Abrimos fichero para lectura.
Leemos cadenas mientras no
encontremos la cadena de final
de fichero (EOF).
Sacamos por pantalla cada
cadena.
Cerramos fichero.

Programacin I

Ing. Margarita Aucancela Msc.

43

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura


Una alternativa para leer cadenas completas es la funcin fgets, de
funcionamiento anlogo a gets:

char *fgets (char *s, int n, file *pf);


La funcin fgets lee n caracteres del fichero apuntado por pf o hasta que
encuentre el caracter de fin de linea o retorno de carro. Introduce los

caracteres en la cadena s, adems de el carcter de retorno de carro ('\n')


y el carcter de final de cadena.

Veamos un ejemplo que aclara la utilizacin de fgets. Es similar al utilizado


para explicar fscanf, pero ahora el programa no va a permitir leer una
cadena separada por espacios.
Programacin I

Ing. Margarita Aucancela Msc.

44

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura


Veamos un ejemplo de escritura de datos de distintos tipos en un fichero
mediante fprintf:

Programacin I

Ing. Margarita Aucancela Msc.

45

Escuela de Ingeniera en Sistemas y Computacin

Funciones de escritura y lectura

Programacin I

Ing. Margarita Aucancela Msc.

46

Escuela de Ingeniera en Sistemas y Computacin

Actividad:
Implementar una solucin al siguiente problema:

Una ferretera desea almacenar los datos de las piezas que comercializa,
de estas se requiere almacenar el nombre de la pieza, el cdigo, el
numero de unidades existentes en bodega y el precio de cada unidad.
Esta informacin requiere ser almacenada en un archivo, al cual se va a
llamar inventario.txt

Programacin I

Ing. Margarita Aucancela Msc.

47

Escuela de Ingeniera en Sistemas y Computacin

Archivos de acceso aleatorio


La utilizacin de ficheros de acceso secuencial slo permite leer o escribir
datos desde el principio del archivo o al final del mismo. A diferencia de
estos, el acceso directo a cualquier dato de un archivo, es posible
realizarlo la utilizacin del modo de acceso aleatorio. Para ello, todas las
operaciones vistas anteriormente son vlidas. El nico elemento nuevo

que se incorpora en este tipo de acceso, es la funcin capaz de posicionar


el puntero del fichero, que devuelve la funcin fopen en distintas partes

del fichero para acceder a datos intermedios.

Programacin I

Ing. Margarita Aucancela Msc.

48

Escuela de Ingeniera en Sistemas y Computacin

Archivos de acceso aleatorio


El tipo FILE es una estructura que contiene varios campos, uno de los
cuales contiene el nmero de byte al que se est apuntando en un
momento dado de la ejecucin del programa. Cuando se abre un fichero
para lectura, el campo mencionado de la variable pt declarada de tipo FILE
es 0, indicando de esta manera que la primera lectura que se haga ser

del primer byte. A medida que se van leyendo bytes, el valor de dicho
campo se va incrementando.

Programacin I

Ing. Margarita Aucancela Msc.

49

Escuela de Ingeniera en Sistemas y Computacin

Archivos de acceso aleatorio


La funcin fseek( ) permite modificar el valor del puntero pf para que
apunte a cualquier byte del fichero y tener de esta manera un acceso

aleatorio. El manejo de archivos de acceso aleatorio no implica ms que


aadir la nueva funcin fseek a las ya existentes para archivos de acceso

secuencial. Su especificacin es la siguiente:

fseek(FILE *pf, long int desplazamiento, int modo)


donde:
pf: es el puntero a un archivo,
desplazamiento: es el desplazamiento en bytes a efectuar,
modo: es el punto de referencia que se toma para efectuar dicho
desplazamiento.
Programacin I

Ing. Margarita Aucancela Msc.

50

Escuela de Ingeniera en Sistemas y Computacin

Archivos de acceso aleatorio


En el fichero de cabecera <stdio .h> hay tres constantes definidas:
SEEK_SET

(0)

SEEK_CUR

(1)

SEEK_END

(2)

Los valores entre parntesis indican su valor. El tercer parmetro (modo)


de la funcin fseek puede contener una cualquiera de las constantes

simblicas indicando que el desplazamiento se har a partir del principio


del fichero (SEEK_SET), a partir del la posicin actual de pf (SEEK_CUR) o a

partir del final del fichero (SEEK_END).


Programacin I

Ing. Margarita Aucancela Msc.

51

Escuela de Ingeniera en Sistemas y Computacin

Archivos de acceso aleatorio


Para el siguiente ejemplo supondremos que el fichero "FICHERO.DAT",
contiene la cadena "ESTE ES EL TEXTO DEL FICHERO", y veremos como leer
diversas palabras del mismo:

Programacin I

Ing. Margarita Aucancela Msc.

52

Escuela de Ingeniera en Sistemas y Computacin

Archivos binarios
Una forma eficiente de almacenar nmeros en el disco consiste en utilizar

archivos binarios. En este tipo de archivos no se almacenan los nmeros


como cadenas de caracteres sino que se almacenan de la misma forma

que se hace en memoria. El contenido de los archivos binarios no puede


ser visualizado mediante un editor de textos.

Programacin I

Ing. Margarita Aucancela Msc.

53

Escuela de Ingeniera en Sistemas y Computacin

Archivos binarios
La funcin utilizada para leer datos de un archivo binario es fread y la

funcin utilizada para escribir datos en un archivo binario es fwrite. Estas


funciones son independientes del tipo de dato que se lea o escriba, es

decir, no realizan ninguna interpretacin del tipo de dato.

Programacin I

Ing. Margarita Aucancela Msc.

54

Escuela de Ingeniera en Sistemas y Computacin

Archivos binarios
La especificacin de la funcin fread es la siguiente:

size_t fread(void *p, size_t size, size_t n, FILE *pf)


Para fread:
El puntero p apunta a la variable en la cual se almacenarn los datos
ledos del archivo binario.
El argumento size contiene el nmero de bytes que componen cada
uno de los elementos que van a ser ledos.
El argumento n contiene el nmero de elementos de tamao size que
han de leerse.
El cuarto argumento es el puntero o descriptor de fichero que
devuelve la funcin fopen.
Programacin I

Ing. Margarita Aucancela Msc.

55

Escuela de Ingeniera en Sistemas y Computacin

Archivos binarios
La especificacin de las funcin fwrite es la siguiente:

size_t fwrite(void *p, size_t size, size_t n, FILE *pf)


Para fwrite:
El puntero p apunta a la variable en la cual se encuentran los datos que
se escribirn en el fichero.
El argumento size contiene el nmero de bytes que componen cada
uno de los elementos que van a ser escritos en el archivo binario.
El argumento n contiene el nmero de elementos de tamao size que
se van a escribir.
El cuarto argumento es el puntero o descriptor de fichero que
devuelve la funcin fopen.
Programacin I

Ing. Margarita Aucancela Msc.

56

Escuela de Ingeniera en Sistemas y Computacin

Archivos binarios
Ejemplo:
#include <stdio.h>
void main ( ) {
FILE *pf;
float v[ ] = {1.43, 4e-5, 32.01,
0.2e1};
........................
pf = fopen(''fichero.dat'', ''wb'');
fwrite(v, sizeof(float), 4, pf);
fclose(pf);

Programacin I

Declaramos vector de 4 nmero


reales.

Abrimos fichero binario para


escritura.
Escribimos en el fichero el vector v,
y dotamos al programa
de mayor portabilidad utilizando
sizeof.
Esto permite que el programa
funcione en distintas mquinas
independientemente de su
representacin de tipos de datos
en bytes.

Ing. Margarita Aucancela Msc.

57

Escuela de Ingeniera en Sistemas y Computacin

Bibliografa
Webgrafas:
https://www.youtube.com/channel/UC7mirgLdHJUoqbaGi_KOr2w
http://decsai.ugr.es/~jfv/ed1/c/cdrom/index.html
Bibliografa:
Programacin en C, Joyanes Luis.

Programacin I

Ing. Margarita Aucancela Msc.

58

También podría gustarte