IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Comment écrire dans un fichier binaire


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Comment écrire dans un fichier binaire
    Salut à tout le monde,

    Je suis en train de faire un programme en C qui permet de gérer les employés dans une entreprise; j'ai commencé les premières tâches de test pour ce programme comme cela :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include <windows.h>
    #include <myconio.h>
     
     typedef struct employe{ int code;
                            char nom[30];
                            float salaire;
                            struct employe*s;}*emp;
    void creation_liste(emp*T,int code,char nom[30],float salaire){ emp tmp;
                                                       emp ep=(emp)malloc(sizeof(struct employe));
                                                       ep->code=code;
                                                       strncpy(ep->nom,nom,30); ep->nom[29]='\0';
                                                       ep->salaire=salaire;
                                                       ep->s=NULL;
     
                                                       if(*T==NULL) *T=ep;
                                        else if( (*T)->code > ep->code){ ep->s=*T;
                                                                      *T=ep;}
                                              else{
                                              tmp=*T;
                                              while(tmp->s!=NULL && ((tmp->s)->code < ep->code))/*tant que on a pas atteindre la fin et le code de ajouter <au code entrer*/ 
                                              tmp=tmp->s;
                                              if(tmp->s==NULL){ tmp->s=ep;}
                                              else{ep->s=tmp->s;
                                                   tmp->s=ep;   }}}
     
     
     
     
     
     
     void aficher_liste_employe(emp T){ emp tmp; 
                                       if(T==NULL) printf("la liste est vide");
                                       else{tmp=T;
                                           gotoxy(25,2);printf("la liste des employ%cs\n\n");
                                           gotoxy(8,6);printf("CODE");
                                           gotoxy(30,6);printf("NOM");
                                           gotoxy(50,6);printf("SALAIRE");
                                           printf("\n\n");
                                             do{
                                                printf("       %d                   %s           %f ",tmp->code,tmp->nom,tmp->salaire);
     
                                             printf("\n\n");
                                                tmp=tmp->s;}
                                            while(tmp!=NULL);}}
     
     
     
     void supprimer_employer( int cde,emp*T){ emp ep,ep_R; 
                                              if(*T==NULL){printf("la liste est vide");}
     
                                              else{ 
     
                                                   if((*T)->code==cde) 
                                                               { ep_R=*T;
                                                                 *T=(*T)->s;// on remplace l'employé trouvé par le suivant//
     
     
                                                                 free(ep_R);}
                                                   else{ ep_R=*T;
                                                       while(ep_R!=NULL && ep_R->code!=cde)                   
                                                                     {ep=ep_R;    // on repere l'element precedent à l'element à suprimer//
                                                                                  //pour k'on puisse faire le chainage//
                                                                      ep_R=ep_R->s;}
                                                       if(ep_R!=NULL){ ep->s=ep_R->s;
                                                                       free(ep_R);}
                                                        else{printf("l'employ%c que vous cherchez n'%cxiste pas");                }}}
     
     
     
    int main(){ emp T=NULL;int n;
                  creation_liste(&T,100,"employé1",4500);
                  creation_liste(&T,105,"employé2",3500);
                  creation_liste(&T,200,"employé3",3000);
                  creation_liste(&T,110,"employé4",4000);
                  aficher_liste_employe(T);
                  printf("\n\n");
                  printf("si vous voulez suprimez un employ%c etrez son code:");
                  scanf("%d",&n);
                  supprimer_employer(n,&T);
                  system("CLS");
                  aficher_liste_employe(T);
     
     
                  system("pause");
                  return EXIT_SUCCESS;}
    mon petit programme fonctionne bien, mais je veux que les employés crées soient enregistrés dans un fichier en binaire où je pourrais les récupérer et les afficher à partir du fichier par la suite. Si vous pouvez m'aider et m'expliquer les détails pour que je puisse effectuer cette tâche, je suis encore un débutant en C c'est ma première expérience;

    je vous remercie trop;

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pour effectuer une écriture dans un fichier, en binaire il faut :
    • ouvrir le fichier avec fopen() (en mode 'wb' pour write binary)
      vérifier si le fichier est bien ouvert (différent à NULL)
      écrire toute vos données avec fwrite()
      fermé le fichier avec fclose()


    Pour relire un fichier binaire, il faut faire la même chose, sauf que l'ouverture se fait en mode 'rb' (read binary) et faire des fread() pour lire les éléments.

    Toutefois,il se peut que vous ne voyez toujours pas comment faire, je vous conseille la lecture d'un cours, tel que celui-ci.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    salut,
    merci pour l'aide,mais mon problème c'est que je ne sais pas où je dois mettre les instructions d'écrire dans le fichier,est ce que dans la fonction de création:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    void creation_liste(emp*T,int code,char nom[30],float salaire){ emp tmp;
                                                       emp ep=(emp)malloc(sizeof(struct employe));
                                                       ep->code=code;
                                                       strncpy(ep->nom,nom,30); ep->nom[29]='\0';
                                                       ep->salaire=salaire;
                                                       ep->s=NULL;
     
                                                       if(*T==NULL) *T=ep;
                                        else if( (*T)->code > ep->code){ ep->s=*T;
                                                                      *T=ep;}
                                              else{
                                              tmp=*T;
                                              while(tmp->s!=NULL && ((tmp->s)->code < ep->code))/*tant que on a pas atteindre la fin et le code de ajouter <au code entrer*/ 
                                              tmp=tmp->s;
                                              if(tmp->s==NULL){ tmp->s=ep;}
                                              else{ep->s=tmp->s;
                                                   tmp->s=ep;   }}}
    ,

    ou bien je dois crée une autre fonction qui accepte comme argument la tête de liste et l’élément crée puis il fait l'écriture dans le fichier??

    aidez moi s'il vous plaît et merci ;

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Moi, je créerai une nouvelle fonction, qui accepte un nom de fichier (chaine de caractères) + la tête de la liste.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    salut je vous remercie pour ta réponse,s'il vous plaît si vous pouvez m'écrire la fonction que tu m'avais dis parce que je suis bloqué et j'ai pas arrivé à bien faire cette fonction;
    j'ai essayé d'introduire l'instruction d'écriture dans le fichier comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    typedef struct employe{ int code;
                            char nom[30];
                            float salaire;
                            struct employe*s;}*emp;
    void creation_liste(emp*T,int code,char nom[30],float salaire){ emp tmp;
                                                                    FILE *fichier;
                                                                    fichier =fopen("liste.txt","w+");
                                                       emp ep=(emp)malloc(sizeof(struct employe));
                                                       ep->code=code;
                                                       strncpy(ep->nom,nom,30); ep->nom[29]='\0';
                                                       ep->salaire=salaire;
                                                       ep->s=NULL;
     
                                                       if(*T==NULL) 
                                                                   {*T=ep;
                                                                   fichier =fopen("liste.txt","a+");
                                                                   if( fichier= fopen("liste.txt","a+")== NULL ) printf("erreur d'ouverture");
                                                                   else { fwrite(&ep,sizeof(ep),1,fichier);}}
     
     
                                        else if( (*T)->code > ep->code){ ep->s=*T;
                                                                      *T=ep;}
                                              else{
                                              tmp=*T;
                                              while(tmp->s!=NULL && ((tmp->s)->code < ep->code))/*tant que on a pas atteindre la fin et le code de ajouter <au code entrer*/ 
                                             { fichier =fopen("liste.txt","a+");
                                                                   if( fichier= fopen("liste.txt","a+")== NULL ) printf("erreur d'ouverture");
                                                                   else { fwrite(&ep,sizeof(ep),1,fichier);}
                                              tmp=tmp->s;}
                                              if(tmp->s==NULL){ tmp->s=ep;}
                                              else{ep->s=tmp->s;
                                                   tmp->s=ep;   }}}
    mais j'ai pas réussi,si vous pouvez m'aider pour trouver l'erreur et merci
    beaucoup.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    pourrais-tu indenter correctement ton code ? c'est une plaie à lire.
    LittleWhite parle d'une fonction qui prendrait en paramètre le nom du fichier et la tête de liste, où se trouve ne serait-ce que le prototype ?
    Tu as copié exactement le même code que plus haut...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    moi j'ai pas utilisé la fonction qui accepte en argument la tête de la liste et le nom du fichier car j'ai pas arrivé à bien savoir qui sont les bien instructions à utilisés pour cela j'ai introduit la lecture en sein de la fonction de création comme j'ai indiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ...............
    if (*T == NULL) {
        *T = ep;
        fichier = fopen("liste.txt", "a+");
        if (fichier = fopen("liste.txt", "a+") == NULL)
    	printf("erreur d'ouverture");	//ouverture de fichier //
        else {
    	fwrite(&ep, sizeof(struct employe), 1, fichier);
    }}				// Ecriture dans le fichier//
     
     
    else if ((*T)->code > ep->code) {
        ep->s = *T;
        *T = ep;
    } else {
        tmp = *T;
        while (tmp->s != NULL && ((tmp->s)->code < ep->code)) {	/*tant que on a pas atteindre la fin et le code de ajouter <au code entrer */
    	fichier = fopen("liste.txt", "a+");
    	if (fichier = fopen("liste.txt", "a+") == NULL)
    	    printf("erreur d'ouverture");
    	else {
    	    fwrite(&ep, sizeof(ep), 1, fichier);
    	}			// Ecriture dans le fichier//
    	...........
    c
    cela mon code pour l’écriture dans le fichier.
    et il me fait plaisir si vous pouvez m'expliquer en détail le prototype de la fonction qui fait l'écriture dans le fichier,car je suis entrain de faire un projet d'étude et je suis très besoin de votre aide;

    je vous remercies.

Discussions similaires

  1. Réponses: 32
    Dernier message: 17/05/2006, 16h03
  2. comment écrire dans un fichier avec Ant-apache
    Par sidi.elmoctar dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 25/04/2006, 17h44
  3. [Delphi] Comment écrire dans un fichier texte ?
    Par Mickey.jet dans le forum Débuter
    Réponses: 2
    Dernier message: 01/04/2006, 14h00
  4. [C#] Comment écrire dans un fichier ?
    Par guillaume16 dans le forum C#
    Réponses: 9
    Dernier message: 30/03/2006, 13h39
  5. [JAR] Comment écrire dans un fichier properties dans un jar
    Par Alec6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 05/10/2004, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo