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

Signaler
Messages postés
21
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
1 décembre 2012
-
Messages postés
21
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
1 décembre 2012
-
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

Messages postés
21
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
1 décembre 2012

Petite correction : la structure est présente dans mon programme , et non dans le fichier binaire.
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
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.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
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
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Exact Pistol_pete c'est ab ou a+b et pas w+b comme je l'ai écrit un peu vite.
Messages postés
21
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
1 décembre 2012

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 ;-)