De programación c: cómo acceder a los archivos almacenados en el almacenamiento aleatorio

acceso a los archivos al azar en la programación C no tiene nada que ver con los números al azar. Por el contrario, el archivo se puede acceder en cualquier punto acá, allá, e incluso Yon. Este tipo de acceso que funciona mejor cuando el archivo está salpicada de registros del mismo tamaño. La noción de registros trae estructuras, que pueden ser fácilmente escriben en un archivo y luego fue a buscar la espalda de forma individual, de forma selectiva, o todos a la vez.

Cómo leer y rebobinado

A medida que el programa lee los datos de un archivo, se realiza un seguimiento de la posición a partir de datos de donde se lee en el archivo. Una posición del cursor se mantiene de modo que la ubicación en la que el código está leyendo o escribiendo en un archivo no se pierde.

La primera vez que abre un archivo, la posición del cursor está al principio del archivo, el primer byte. Si se lee un registro de 40 bytes en la memoria, la posición del cursor es de 40 bytes desde el principio. Si se lee hasta el final del archivo, la posición del cursor mantiene ese lugar también.

Para mantener las cosas confusas, la posición del cursor se refiere a menudo como una apuntador de archivo, a pesar de que no es una variable de puntero o un tipo de archivo de puntero. Es simplemente la ubicación dentro de un archivo en el que se lee el siguiente byte de datos.

Video: C++ - #1 Base de datos c++ | Entrada y Salida por archivos txt

Puede meterse con la posición del cursor mediante el uso de varias funciones interesantes en C. Dos de ellos son ftell () y rebobinado (). La función ftell () devuelve la posición actual del cursor que está compensado como un valor entero largo. La función de rebobinado () mueve el cursor de nuevo al comienzo del archivo.

El bucle while en Tell y rebobinado lee en los registros del archivo de bond.db. En la línea 28, la función ftell () devuelve la posición del cursor. Si es mayor de una entrada (lo que significa que la segunda entrada ha sido leído), la posición del cursor se restablece al inicio del archivo mediante la función de rebobinado (), en la línea 29.

Video: 5. Almacenar datos - Curso manejo de archivos en C++

DECIR y rebobinar

 #include #include #include int main () {entrada struct {char el actor [32] -INT título año-char [32] -} - struct entrada enlace-archivo * recuento a007-int = 0-A007 = fopen ("bond.db","r") -Si (! A007) {puts ("ESPECTRO gana!") -exit (1) -} while (fread (&enlace, sizeof (entrada struct), 1, a007)) {printf ("% St% dt% sn", Bond.actor, bond.year, bond.title) -Si (ftell (a007) gt; sizeof (entrada struct)) de rebobinado (a007) -count ++ - si (countgt; 10) Break-} fclose (a007) -Retorno (0) -}

Para determinar el desplazamiento adecuado, una sentencia if compara el resultado de la función y el operador sizeof ftell () en la entrada de la estructura. Tenga en cuenta que ftell () simplemente devuelve un valor entero largo, no un número específico de estructuras.

El número de variables, declarado e inicializado en la línea 14, mantiene un registro de cuántas veces se repite el bucle while. Si no fuera así, el programa de bucle sin fin. Eso es malo. Por eso, cuando el valor de recuento es mayor que 10, se rompe el bucle y entonces el archivo se cierra y termina el programa.

Ejercicio 1: Escriba el código fuente de Tell y rebobinado en su editor. Generar y ejecutar para ver cómo operan las funciones ftell () y rebobinado ().

¿Cómo encontrar un registro específico

Cuando un archivo contiene registros de todas del mismo tamaño, puede utilizar la función fseek () para arrancar cualquier elemento individual. El formato para fseek () es

fseek (manejar, offset, de donde) -

encargarse de es un identificador de archivo, un puntero de fichero que representa un archivo que está abierto para la lectura. compensar es el número de bytes desde el principio, al final o la posición actual en un archivo. Y De dónde es uno de tres constantes: SEEK_SET, SEEK_CUR o SEEK_END para el inicio, posición actual, o al final de un archivo, respectivamente.

Mientras que el archivo contiene los registros de un tamaño constante, puede utilizar fseek () para arrancar cualquier registro específico, como se muestra en buscar un registro específico en un archivo.

Buscar un registro determinado en una ARCHIVO

#include #include #include int main () {entrada struct {char el actor [32] -INT título año-char [32] -} - struct entrada enlace-archivo * A007-A007 = fopen ("bond.db","r") -Si (! A007) {puts ("ESPECTRO gana!") -exit (1) -} fseek (A007, sizeof (struct entrada) * 1, SEEK_SET) -fread (&enlace, sizeof (entrada struct), 1, a007) -printf ("% St% dt% sn", Bond.actor, bond.year, bond.title) -fclose (A007) -Retorno (0) -}

El código que se muestra en buscar un registro específico en un archivo nuevo es bastante similar al código que se muestra en el listado 22-9. La gran adición es la función fseek (), que se muestra en la línea 21. Se establece la posición del cursor de modo que la función fread () que sigue (véase la línea 22) se lee en un registro específico situado dentro de la base de datos.

En la línea 21, la función fseek () examina el archivo representado por a007 mango. El desplazamiento se calcula multiplicando el tamaño de la estructura de entrada.

Al igual que con una matriz, la multiplicación de ese tamaño por 1 produce el segundo registro en el archivo- multiplicar el valor de 0 (o simplemente especifique 0 en la función) para leer el primer registro. La constante SEEK_SET asegura que fseek () empieza a verse desde el principio del archivo.

El efecto neto del código es que se visualiza el segundo registro en el archivo bond.db.

Ejercicio 2: Escriba el código fuente de buscar un registro específico en un archivo. Generar y ejecutar para ver el segundo registro en el archivo.

Artículos Relacionados