You are on page 1of 15

Archivos Directos operaciones

Algoritmo II

Ing. Alberto Moreno

Archivos Directos
La diferencia que encontramos entre los archivos secuenciales y los archivos directos, es que en estos ultimos podemos acceder a un registro en particular colocando el apuntador interno del archivo directamente en el registro deseado. El enter, el espacio o el ctrl+z, son tomados como caractres.

Conceptos
Al trabajar con archivos de acceso directo debemos tener en cuenta algunos conceptos. Direcciones Fsicas El lenguaje C++ utiliza direcciones fsicas para los archivos; el direccionamiento consiste en el espacio (en bytes) ocupado por los datos, en el archivo. Direcciones Lgicas Es la lnea a la que se le asigno un registro.

Conceptos
sizeof(); sta funcin calcula el tamao, en bytes, de una variable o estructura. Claculo de direcciones fisicas Para ello se usa la direccin logica. La frmula sera la siguiente.
dir_fisica=dir_logica *sizeof(registro);

Acciones
Funcin fopen() fclose() fwrite() fread() fseek() Sirve para... Para abrir Para cerrar Para escribir Para leer Para reposicionar

Modos
Modo w+ w a+ a r+ r Lee Escribe Comienza Si No Si No Si Si Si Si Si Si Si No Principio Principio Final Final Principio Principio

Acciones, fopen()
Sirve para abrir o crear un archivo, es impresindible llamar a esta funcin cada vez que se va a trabajar con archivos. La sintxis es:
alias=fopen(PERSONAS.TXT,wb);
Puntero, definido antes con FILE *.

Se usa para indicar que es un archivo Binario.

Acciones, fclose()
Lo usamos antes de terminar de usar un archivo, que fue anteriormente abierto. Su sintxis es:
fclose(alias);

Con sta funcin solo es posible cerrar un archivo a la vez, pero con fcloseall(); cerramos todos.

Acciones, fwrite()
sta funcin est pensada para trabajar con registros de longitud constante. Es capaz de escribir hacia un fichero uno o varios registros de la misma longitud almacenados a partir de una direccin de memoria determinada. Su sintxis sera:
fwrite(&estructura,sizeof(estructura), cant_datos,alias)
Cantidad de datos a guardar.

Dato a grabar.

Tamao, en bytes, del registro.

Ejemplo, fwrite()
#include<stdio.h> #include<conio.h> FILE *alias; struct datos { char nombre[20], edad[5]; }; struct datos persona; void main() { alias=fopen(PERSONA.TXT,w); printf(Nombre: ); flushall(); gets(persona.nombre); printf(Edad: ); flushall(); gets(persona.edad); fwrite(&persona,sizeof(persona),1,alias); fclose(alias); }

Acciones, fread()
Lo que hace esta funcin es cargar en la memoria RAM los datos de un archivo, es decir, lee un archivo. La sintxis es:
fread(&estructura,sizeof(estructura) ,cant_datos,alias);

Ejemplo, fread()
#include<stdio.h> #include<conio.h> FILE *alias; struct datos { char nombre[20], edad[5]; }; struct datos persona; void main() { alias=fopen(PERSONA.TXT,r); fread(&persona,sizeof(persona),1,alias); printf(Nombre: %s,persona.nombre); printf(Edad: %s,persona.edad); fclose(alias); }

Acciones, fseek()
Cuando se abre un archivo en modo de lectura o de escritura, el apuntador del archivo se posiciona al inicio del mismo y cuando un archivo se abre en modo agregar se posiciona al final, sin embargo, se puede reposicionar este apuntador utilizando la funcin fseek. La sintxis:
fseek(alias,dir_fisica,SEEK_SET);
Direccin fisica calculada en bytes. Punto de referencia.

fseek(), Puntos de Referencia


ste es el lugar en el cual se iniciar el conteo de los bytes determinados por la direccin fsica.
Modo 0 1 2 Nombre SEEK_SET SEEK_CUR SEEK_END Posiciona en... El principio. La posicin actual. Al final.

Ejemplo, fseek()
#include<stdio.h> #include<conio.h> #include<string.h> FILE *alias; char a[1]; void main() { alias=fopen("PERSONA.TXT","r+"); strcpy(a,"#"); fseek(alias,7L,0); fwrite(&a,sizeof(a),1,alias); fclose(alias); }

You might also like