Problème de déplacement à la fin d'un fichier binaire

bernidupont Messages postés 21 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 1 décembre 2012 - 16 févr. 2009 à 06:45
bernidupont Messages postés 21 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 1 décembre 2012 - 16 févr. 2009 à 18:05
Bonsoir,
j'ai essayé de résoudre mon problème, mais je n'ai pas su trouver de solution.
Mon problème est le suivant:
j'ai un fichier binaire dans lequel est enregistré la structure qui est la suivante:

typedef struct
{
   long int clé;
   char nom[31];
   int groupe;
} ELEVE;

lorsque j'ouvre le fichier binaire pour lui rajouter un autre ELEVE ,et que je le lit pour l'afficher,
ça m'affiche seulement la dernière structure ELEVE enregistré!

voici la partie de mon code qui permet d'ecrire sur le fichier binaire:

// on ouvre le fichier binaire en écriture
        FILE * archbin = fopen ( "eleves.dat","wb");
       
        // on déplace le pointeur à la fin du fichier  
        if (!fseek(archbin,0L,SEEK_END)) {       
           if (archbin) {         
              if ( fwrite(&a,sizeof(ELEVE),1,archbin) )
                 printf("eleve enregistree! \n\n");
              else printf ("ERREUR : ecriture impossible! \n");
           }                
           else printf ("ERREUR : ouverture impossible! \n"); 
        }
        else printf ("ERREUR : déplacement impossible!");

Pouvez vous me mettre sur la voie svp, ou me dire d'ou pourrait bien venir le problème?
D'avance merci.
Berni.

5 réponses

bernidupont Messages postés 21 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 1 décembre 2012
16 févr. 2009 à 07:08
Petite correction : la structure est présente dans mon programme , et non dans le fichier binaire.
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
16 févr. 2009 à 09:45
En ouvrant ton fichier ainsi fopen ( "eleves.dat","wb"); tu ramène sa longueur à 0 s'il existait déjà et forcément tu te retrouves avec une seule structure dedans.

Il suffit de l'ouvrir ainsi fopen ( "eleves.dat","w+b"); et ça va régler ton problème. le w+ ne ramène pas la longueur à 0.
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 févr. 2009 à 09:59
Salut
Tu peux aussi ouvrir ton fichier comme cela fopen ( "eleves.dat","ab"). Il écrira alors directement à la fin de ton fichier. Plus besoin de fseek ici.
A+

____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
16 févr. 2009 à 10:12
Exact Pistol_pete c'est ab ou a+b et pas w+b comme je l'ai écrit un peu vite.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bernidupont Messages postés 21 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 1 décembre 2012
16 févr. 2009 à 18:05
Merci beaucoup pour votre super coup de pouce!
Le problème venait bien du "w", qui fallait transformer en "a"!
A très bientôt,
Berni.

pS: encore merci ;-)
0
Rejoignez-nous