Archivos de acceso aleatorio en c

Páginas: 6 (1497 palabras) Publicado: 21 de marzo de 2012
Archivos de acceso aleatorio
Los archivos de acceso aleatorio son más versátiles, permiten acceder a cualquier parte del fichero en cualquier momento, como si fueran arrays en memoria. Las operaciones de lectura y/o escritura pueden hacerse en cualquier punto del archivo.
En general se suelen establecer ciertas normas para la creación, aunque no todas son obligatorias:
Abrir el archivo en unmodo que te permita leer y escribir. Esto no es imprescindible, es posible usar archivos de acceso aleatorio sólo de lectura o de escritura.
Abrirlo en modo binario, ya que algunos o todos los campos de la estructura pueden no ser caracteres.
Usar funciones como fread y fwrite, que permiten leer y escribir registros de longitud constante desde y hacia un fichero.
Usar la función fseek parasituar el puntero de lectura/escritura en el lugar apropiado de tu archivo.
Por ejemplo, supongamos que nuestros registros tienen la siguiente estructura:
-------------------------------------------------
struct stRegistro {
-------------------------------------------------
char Nombre[34];
-------------------------------------------------
int dato;-------------------------------------------------
int matriz[23];
-------------------------------------------------
} reg;
Teniendo en cuenta que los registros empiezan a contarse desde el cero, para hacer una lectura del registro número 6 usaremos:
-------------------------------------------------
fseek(fichero, 5*sizeof(stRegistro), SEEK_SET);
-------------------------------------------------
fread(®,sizeof(stRegistro), 1, fichero);
Análogamente, para hacer una operación de escritura, usaremos:
-------------------------------------------------
fseek(fichero, 5*sizeof(stRegistro), SEEK_SET);
-------------------------------------------------
fwrite(®, sizeof(stRegistro), 1, fichero);

Muy importante: después de cada operación de lectura o escritura, el cursor del fichero se actualizaautomáticamente a la siguiente posición, así que es buena idea hacer siempre un fseek antes de un fread o un fwrite.
En el caso de streams, la forma de trabajar es análoga:
-------------------------------------------------
fichero.seekg(5*sizeof(stRegistro), ios::beg);
-------------------------------------------------
fichero.read(®, sizeof(stRegistro));
Y para hacer una operación de escritura,usaremos:
-------------------------------------------------
fichero.seekp(5*sizeof(stRegistro), ios::beg);
-------------------------------------------------
fichero.write(®, sizeof(stRegistro));
Calcular la longitud de un fichero
Para calcular el tamaño de un fichero, ya sea en bytes o en registros se suele usar el siguiente procedimiento:-------------------------------------------------
long nRegistros;
-------------------------------------------------
long nBytes;
-------------------------------------------------
fseek(fichero, 0, SEEK_END); // Colocar el cursor al final del fichero
-------------------------------------------------
nBytes = ftell(fichero); // Tamaño en bytes
-------------------------------------------------
nRegistros =ftell(fich)/sizeof(stRegistro); // Tamaño en registros
En el caso de streams:
-------------------------------------------------
long nRegistros;
-------------------------------------------------
long nBytes;
-------------------------------------------------
fichero.seekg(0, ios::end); // Colocar el cursor al final del fichero
-------------------------------------------------
nBytes = fichero.tellg(); // Tamaño enbytes
-------------------------------------------------
nRegistros = fichero.tellg()/sizeof(stRegistro); // Tamaño en registros

Borrar registros
Borrar registros puede ser complicado, ya que no hay ninguna función de biblioteca estándar que lo haga.
Es su lugar se suele usar uno de estos dos métodos:
1. Marcar el registro como borrado o no válido, para ello hay que añadir un campo...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Acceso Aleatorio De Un Archivo De Acceso Directo En C 4
  • Archivos de acceso aleatorio c++
  • Acceso a archivos en lenguaje c
  • Manejo De Archivos De Acceso Aleatorio Y Secuencial
  • Archivos Aleatorios
  • Memoria de acceso aleatorio
  • Acceso aleatorio en java
  • Archivos c#

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS