Duda con Registros y funciones fwrite fread

monti73
10 de Diciembre del 2009
Buenas, espero me puedan ayudar porque mi mente no da más.
Tengo que resolver un ejercicio que pide almacenar registros con datos de personas en un archivo. Tengo muchos problemas, para empezar no tengo en claro qué es un registro, tengo que guardarlos en un archivo.txt o un .dat?

Lo que hice fue crear un struct con lo que necesito. pero tampoco entiendo bien el tercer campo de las funciones fseek y fread ¿Qué es la cantidad de registros?

Desde ya gracias!

PD: cuando abro el archivo generado, ya sea txt o dat, sólo veo símbolos ascii, y no lo que yo quise escribir, en ese caso el numero '333'. Es normal??

Adjunto el codigo:


struct registro
{
//char nombre[50];
int dni;
// char usuario[20];
//char contra[10];
//char permisos;
};

typedef struct registro Reg;

int main()
{
Reg reg, reg2;
FILE* archivo=fopen("datos.txt","w+");
reg.dni=333;

if(fwrite(&reg,sizeof(int), 3, 3))
printf("ok");

if(fread(&reg2,sizeof(int), 1, archivo))
printf("ok");

printf("n%d", reg.dni);
return 0;
}

Capitan Kirk
10 de Diciembre del 2009
En primer lugar, un registro es un conjunto de datos que están relacionados entre sí. En C, es lo mismo que una estructura de datos.
Tal como tienes el programa, dado que estás empleando fread y fwrite,debes abrir el fichero en modo binario.
Quizás la mejor opción sea "rb+" (abre fichero binario para lectura y escritura).
En cuanto a fread y fwrite, el formato de ambas es similar:

int fread(void *Buffer, int Tamanyo_elemento, int Num_elementos, FILE *Stream)

Los parametros son (por orden):
- Direeción del buffer de datos que quieres enviar (o recibir) del fichero.
- Tamaño de cada elemento (un sizeof de tu estructura de datos).
- Numero de elementos (estructuras de datos) que vas a leer/escribir de una sola vez (si son más de una, estamos hablando de un array de estructuras de datos).
- Fichero en el que vas a leer/escribir los datos (el valor devuelto por fopen).

La función devuelve el número de registros leídos/escritos.

En cuanto a la extensión del archivo, pon la que quieras. Solamente debes tener en cuenta que si se trata de una de las extensiones "registradas" puedes tener problemas si quuieres abrir el archivo desde el explorador (por ejemplo, un archivo ".txt" es un archivo de texto puro que, por defecto, se abre con Notepad, pero si el archivo no es de texto puro, verás cosas raras).

Espero que te sirva de ayuda.

Saludos,