Acceso Aleatorio De Un Archivo De Acceso Directo En C 4

Páginas: 6 (1372 palabras) Publicado: 14 de marzo de 2015
Acceso aleatorio de un archivo de acceso directo en C
Acceso aleatorio a un Archivo
En los ejemplos anteriores, tanto la lectura como la escritura de archivos eran secuenciales. Es decir, se abría el Archivo desde el principio del Archivo y se iban leyendo o escribiendo todos los datos del Archivo en orden, desde el primero hasta el último, secuencialmente.
En la mayoría de los casos esto nospuede servir. Leemos el contenido completo del Archivo y trabajamos con él. O abrimos el Archivo para escribir los resultados y los vamos escribiendo todos seguidos.
Sin embargo, hay casos en que esto se nos puede quedar escaso. Hay veces en que necesitamos acceder una y otra vez al Archivo para leer sus datos, modificar parte de ellos, por el medio. Imagina, por ejemplo, que tenemos guardado en unArchivo nuestra agenda de teléfonos, con nuestros amigos. A veces podemos querer consultar uno que esté en medio del Archivo, o cambiar su número de teléfono, o borrarlo como amigo porque nos hemos peleado.
C nos ofrece esta posibilidad. La función fseek() nos permite desplazarnos rápidamente, sin necesidad de ir leyendo todo, hasta una posición concreta de un Archivo. Esto es lo que se conocecomo acceso aleatorio a un Archivo.
Definimos una estructura y rellenamos el Archivo
Siguiendo con el ejemplo de la agenda, supón que tenemos una estructura de datos en C para guardar nuestros amigos. Como somos vaguetes, sólo pondremos dos campos, el nombre y el teléfono.
typedef struct {
char nombre[20];
int edad;
} persona;
Con esta estructura vamos a hacer un pequeño relleno de un Archivo, paratener algo con lo que jugar. El código puede ser este
FILE *f1;
persona dato;
int i;

/* Abrimos el Archivo binario y de escritura */
f1 = fopen ("persona.dat", "wb");
if (f1 == NULL)
{
perror("No se puede abrir persona.dat");
return -1;
}

/* Escribimos 10 datos, que serán
* Juan0, Juan1, Juan2, Juan3..., pongamos por caso 10 millones de juanes
* con edad 0,1,2,3....
*/
for (i=0; i<10; i++)
{sprintf (dato.nombre, "Juan%d", i);
dato.edad=i;
/* El tamaño es sizeof(dato) y escribimos un registro */
fwrite (&dato, sizeof(dato), 1, f1);
}

/* Cerramos el Archivo */
fclose(f1);
A diferencia del código de ejemplo de copia de Archivos, esta vez el tamaño del dato es sizeof(dato) mientras que en el ejemplo anterior era 1. En este caso escribimos un solo dato cada vez, mientras que antesescribiamos de 1000 en 1000.
Ir a un registro concreto para leer
Imaginemos ahora que una vez que tenemos el Archivo, queremos leer la persona que ocupa la cuarta posición. Su índice es 3, ya que la numeración comienza por cero.
La función fseek() nos permite ir a una posición concreta. La función fseek() admite tres parámetros que son:
FILE *stream. Este es el identificador para el Archivo, que obtuvimosal hacer fopen().
long offset. Esto es cuántos bytes queremos desplazarnos a partir de la posición que indica el siguiente parámetro.
int whence. Este indica desde dónde queremos desplazarnos. Puede tener los siguientes valores:
SEEK_SET. Desde el principio del Archivo
SEEK_CUR. Desde la posición actual en la que estemos.
SEEK_END. Desde el final del Archivo.
Vamos a ver unos ejemplillos paraque quede más claro.
Si ponemos fseek(f1, 100, SEEK_SET) nos situaremos en el byte 100 del Archivo, empezando a contar desde el principio.
Si ponemos fseek(f1, 100, SEEK_END) nos situaremos 100 bytes antes del último byte del Archivo.
Si acabamos de abrir el Archivo y leemos cien bytes y luego hacemos fseek(f1, 100, SEEK_CUR), nos situaremos 100 bytes después del último byte leído, que era el 100,así que nos situaremos en el 200.
Volvemos al ejemplo de la agenda. Queremos el registro número 3 (que en realidad es el cuarto en el Archivo). Lo primero que hay que hacer es calcular en que byte empieza ese registro. Esto es sencillo. Cada registro tiene sizeof(dato) bytes. El primero empezará en el 0, el segundo en sizeof(dato), el tercero en 2*sizeof(dato) y así sucesivamente.
Nuestro...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Archivos de acceso aleatorio en c
  • Archivos de acceso aleatorio c++
  • Acceso a archivos en lenguaje c
  • Manejo De Archivos De Acceso Aleatorio Y Secuencial
  • Crear Un Acceso Directo A Un Programa O Archivo
  • ACCESOS DIRECTOS
  • acceso directo
  • Virus Que Crea Accesos Directos Y Oculta Archivos

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS