Professional Documents
Culture Documents
Algoritmo II
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 *.
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.
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.
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); }