Enregistrer et lire une structure dans un fichier

Enregistrer et lire une structure dans un fichier - C - Programmation

Marsh Posté le 20-04-2004 à 22:17:11    

Bonjour, je voudrais savoir s'il est possible d'enregistrer et ensuite de charger une structure dans un fichier ?
 
par ex
 

Code :
  1. typedef struct {
  2. char nom[128];
  3. char prenom[128];
  4. int age;
  5. } personne;


 
Si oui, comment faire ? Je pensais en utilisant un fprintf et pui un fscanf, mais je ne sais pas si c'ets possible.
Merci
@++

Reply

Marsh Posté le 20-04-2004 à 22:17:11   

Reply

Marsh Posté le 21-04-2004 à 00:08:58    

fread et fwrite:
 

Code :
  1. #include <stdio.h>
  2.        size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  3.        size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

Reply

Marsh Posté le 21-04-2004 à 00:44:09    

ouvre le fichier en mode binaire

Reply

Marsh Posté le 21-04-2004 à 01:09:03    

A la place de ton int, utilise un long (tu as moins de chance d'avoir de pb entre plate-formes sauf les 64 bits).
sous GCC, tu peut rajouter "__attribute__ ((packed));" à la fin de chaque ligne pour fixer la taille quelle que soit la config du compilateur.

Reply

Marsh Posté le 21-04-2004 à 11:47:34    

mauvais conseil : dès qu'on fait du binaire, il n'y a plus de compatiblité viable : ordre des octets, différences des compilateurs, tailles des données ... si j'étais toi j'ignorerais le packed de gcc (tu veux faire quoi niveau portabilit"avec un truc comme ça ?)
 
au mieux pour la taille de ton int tu peux utilisé <stdint.h> pour fixer un peu la taille de ton int. mais sinon en binaire c'est peine perdu. si tu veux un format portable facilement, repasse en mode texte

Reply

Marsh Posté le 21-04-2004 à 14:29:52    

Taz> Cela a toujours été un problème avec le c...
Dans mes progs, pour stocker, j'envoi également le sizeof de la variable à stocker. A la lecture plus de problème.
C'est plus viable que packed, je suis bien d'accord, mais c'est aussi plus complexe.

Reply

Marsh Posté le 21-04-2004 à 17:47:15    

mais on a jamais dit le contraire.

Reply

Marsh Posté le 21-04-2004 à 20:43:55    

ok, fread et fwrite, par contre, size c'est la taille totale de ma structure, donc je dois fait une zone de la taille de chacun de ses composants ?
par contre, nmemb, c'est le nombre de structures que j'enregistre ?
Et enfin, si par exemple, j'ai un tableau de 100 caractère, mais que ma chaine en fait que 10, est-ce que cela va m'enregistrer un tableau de 100, ou un tabelau de 10 ? En fait, je pense que ce sera la première solution, sinon çà risque de foutre la mer** , mais il vaux mieux demander.
merci et @+++

Reply

Marsh Posté le 21-04-2004 à 20:47:52    

fread/fwrite -> binaire -> vas lire/écrire invaraiblement size*nmemb byte (char).
 
 
écrire une personne
fwrite (&taz, sizeof taz, 1, out)
 
écrire un tableau
fwrite (ppl, sizeof ppl[0], sizeof ppl / sizeof ppl[0], out)
 
écire un pointeur
fwrite(ptr, sizeof *ptr, N, out);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed