Lecture/Écriture d'une structure dans un fichier binaire

Je suis en cours d'exécution d'un programme avec 3 structures et de ce que je fais pour lire/écrire dans le fichier binaire est la suivante:

struct Medico
{
int Id_Doctor;
int Estado;
char Nombre[60];
char Clave_Acceso[20];
char Especialidad[40]; 
struct Medico *next;
};
typedef struct Medico *Medicazos;
typedef struct Medico Meds;
Medicazos Nuevo;
FILE *Archivaldo;
char especialida[40], password[20];
char nombre_doc[60];
int estado_doc, id_doc;
Archivaldo=fopen("md.dat", "rb");
fclose(Archivaldo);
if((Archivaldo=fopen("md.dat", "rb"))==NULL)
{
printf("No se pudo abrir el archivo de Medicos\n"); //couldnt open file msg
exit(1);
}
rewind(Archivaldo);
while(!feof(Archivaldo))
{
if(*Inicio != NULL)  //read from file and write in struct
{
Nuevo = (Medicazos) malloc (sizeof(Meds)); //new=pointer
fread(&id_doc, sizeof(int), 1, Archivaldo);
fread(nombre_doc, sizeof(char), sizeof(nombre_doc), Archivaldo);
fread(password, sizeof(char), 20 , Archivaldo);
fread(especialida, sizeof(char), 40, Archivaldo);
fread(&estado_doc, sizeof(int), 1, Archivaldo);
Nuevo->Id_Doctor=id_doc; ///copies data in structure
strcpy(Nuevo -> Nombre , nombre_doc);
strcpy(Nuevo -> Clave_Acceso, password);
strcpy(Nuevo -> Especialidad, especialida);
Nuevo-> Estado = estado_doc;
printf("---------------------------------\n"); //display info
printf("ID: %d\n", id_doc);
printf("\nDoctor: ");
puts(nombre_doc);
printf("\nPassword: ");
puts(password);
printf("\nEspecialidad: ");
puts(especialida);
printf("\nEstado: ");
if(estado_doc==1)
puts("Activo\n");
else
puts("Inactivo\n");
Nuevo-> next = *Inicio;
*Inicio = Nuevo;
}
else 
{
*Inicio = (Medicazos)malloc(sizeof(Meds));
fread(&id_doc, sizeof(int), 1, Archivaldo);
fread(nombre_doc, sizeof(char), sizeof(nombre_doc), Archivaldo);
fread(password, sizeof(char), 20 , Archivaldo);
fread(especialida, sizeof(char), 40, Archivaldo);
fread(&estado_doc, sizeof(int), 1, Archivaldo);
(*Inicio)->Id_Doctor=id_doc;
strcpy((*Inicio) -> Nombre , nombre_doc);
strcpy((*Inicio) -> Clave_Acceso, password);
strcpy((*Inicio) -> Especialidad, especialida);
(*Inicio)-> Estado = estado_doc;
printf("--------------------------------\n"); //display info
printf("ID: %d\n", id_doc);
printf("\nDoctor: ");
puts(nombre_doc);
printf("\nPassword: ");
puts(password);
printf("\nEspecialidad: ");
puts(especialida);
printf("\nEstado: ");
if(estado_doc==1)
puts("Activo\n");
else
puts("Inactivo\n");
(*Inicio) -> next = NULL;
}
}
fclose(Archivaldo);

Est-il possible de faire le simplifier?

MODIFIER: Aussi, lorsque j'essaie d'afficher les fichiers d'une personne mentionnée moi de ne pas utiliser feof alors que pour la lecture/écriture. Je n'ai pas de rappeler pourquoi. Ce qui pourrait être utilisé à la place?

Veuillez formater le code.
Veuillez étiqueter vos questions dans l'avenir avec la langue que vous utilisez. J'ai marqué avec C parce que on dirait que vous êtes seulement en utilisant C.
J'ai pensé que je l'ai fait, je suis tellement désolé; btw chaque fois que je semble pour formater le code quand je poste la question, il ne semble pas être sur le format..
Pourquoi ne pas vous serialise votre structure dans quelque chose comme json et de les stocker sur le disque en tant que texte (plutôt que binaire) fichier. Il serait débogage plus simples et les fichiers de texte sont généralement plus faciles à gérer que les binaires.
Je loveeeee de le faire sur un fichier txt, mais je suis tenu de le faire en binaire.

OriginalL'auteur drodri420 | 2010-12-08

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *