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 :

Lire et écrire dans un fichier binaire


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut Lire et écrire dans un fichier binaire
    Mon programme remplis mal le fichier, lorsque j'essaye de le lire et le mettre dans un maillon, il me sort n'importe quoi!!!

    Voici mon code :
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
     
     
    typedef struct Voiture        //Définition de la structure Voiture
    {
            char marque[20];
            char modele[20];
            char puissance[3];
            struct Voiture *suivant;
    }Voiture;
     
     
    void Creer (Voiture **p);
    void Ecrire (Voiture *p);
    void Lecture (void);
     
    int main(void)                 
    {      
     
          Voiture *tete=NULL;
    	  Creer (&tete);
    	  Ecrire(tete);
    	  Lecture();
    	  //system("cls");
    	 // printf("%s\n",tete->marque);
    	  //printf("%s\n",tete->suivant->marque);
          free(tete); tete=NULL; /* il faut liberer la memoire. C'est tres imporant */
    	  return EXIT_SUCCESS; 
     
     
     }
     
    void Creer (Voiture **p)        //Définition de la fonction Creer qui est de type Voiture
    {		
    		Voiture *voit=malloc(sizeof *voit);
    		if(voit != NULL)
    		{
    			printf("Entrez la marque :\n");
    			scanf("%s",&(voit->marque));
    			printf("Entrez le modele :\n");
    			scanf("%s",&(voit->modele));
    			printf("Entrez la puissance :\n");
    			scanf("%s",&(voit->puissance));
    			voit->suivant=*p;
    			*p=voit;
    		}        
    }
    void Ecrire(Voiture *p)
    {	
     
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "wb");
    	fwrite(p,sizeof(p),1, fic);
    	fclose(fic);
    	fic=NULL;
    }
    void Lecture (void)
    {	
    	Voiture *voit=malloc(sizeof voit);
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "rb");
    	while(fread(voit,sizeof(voit),1,fic))
    	{
    		printf("%s,: %s : %s;",voit->marque,voit->modele,voit->puissance);
    	}
     
    	fclose(fic);
    	fic=NULL;
    }

  2. #2
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Le second paramètre de fread() et fwrite() n'est pas bon, ce n'est pas la taille de la structure.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    Salut,

    Dans la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Ecrire(Voiture *p)
    p est un pointeur... Il faut donc écrire comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(p,sizeof(*p),1, fic);
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(p,sizeof(p),1, fic);
    et dans

    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(fread(voit,sizeof(*voit),1,fic))
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(fread(voit,sizeof(voit),1,fic))
    Sinon, juste un truc, la bugati Veyron fait 1001chevaux, la puissance devrais plutot etre un char(4) ! lol

    Désolé si je dis n'importe quoi, ça fait longtemps que j'ai pas fait de C... mais de souvenir, c'est comme ça !

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    mince, jme suis fait grillé !! lol

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut
    J'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Lecture (void)
    {	
    	Voiture *voit=malloc(sizeof voit);
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "rb");
    	while(fread(voit,sizeof(Voiture),1,fic))
    	{
    		printf("%s,: %s : %s;",voit->marque,voit->modele,voit->puissance);
    	}
     
    	fclose(fic);
    	fic=NULL;
    }
    et ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Lecture (void)
    {	
    	Voiture *voit=malloc(sizeof voit);
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "rb");
    	while(fread(voit,sizeof(*voit),1,fic))
    	{
    		printf("%s,: %s : %s;",voit->marque,voit->modele,voit->puissance);
    	}
     
    	fclose(fic);
    	fic=NULL;
    }
    Et sa marche tjrs pas!!!

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par tinico
    Sinon, juste un truc, la bugati Veyron fait 1001chevaux, la puissance devrais plutot etre un char(4) ! lol
    En effet, car pour avoir "1001", il faut 5 cases dans un tableau de caractères...
    (un pour le '\0')

    Jc

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    change aussi le fwrite !

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut
    sa marche bien, la lecture s'affiche bien mais juste après ça bug, sa fait bugger windows!!!!!
    J'ai fais ça :
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
     
     
    typedef struct Voiture        //Définition de la structure Voiture
    {
            char marque[20];
            char modele[20];
            char puissance[3];
            struct Voiture *suivant;
    }Voiture;
     
     
    void Creer (Voiture **p);
    void Ecrire (Voiture *p);
    void Lecture (void);
     
    int main(void)                 
    {      
     
          Voiture *tete=NULL;
    	  Creer (&tete);
    	  Ecrire(tete);
    	  Lecture();
    	  //system("cls");
    	 // printf("%s\n",tete->marque);
    	  //printf("%s\n",tete->suivant->marque);
          free(tete); tete=NULL; /* il faut liberer la memoire. C'est tres imporant */
    	  return EXIT_SUCCESS; 
     
     
     }
     
    void Creer (Voiture **p)        //Définition de la fonction Creer qui est de type Voiture
    {		
    		Voiture *voit=malloc(sizeof *voit);
    		if(voit != NULL)
    		{
    			printf("Entrez la marque :\n");
    			scanf("%s",&(voit->marque));
    			printf("Entrez le modele :\n");
    			scanf("%s",&(voit->modele));
    			printf("Entrez la puissance :\n");
    			scanf("%s",&(voit->puissance));
    			voit->suivant=*p;
    			*p=voit;
    		}        
    }
    void Ecrire(Voiture *p)
    {	
     
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "wb");
    	fwrite(p,sizeof(*p),1, fic);
    	fclose(fic);
    	fic=NULL;
    }
    void Lecture (void)
    {	
    	Voiture *voit=malloc(sizeof voit);
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "rb");
    	while(fread(voit,sizeof(*voit),1,fic))
    	{
    		printf("%s,: %s : %s;",voit->marque,voit->modele,voit->puissance);
    	}
     
    	fclose(fic);
    	fic=NULL;
    }

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    Ha oui, c'est vrai... Oula, c'est loin, mais je m'en souvient oui !!!

  10. #10
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par poche
    sa marche bien, la lecture s'affiche bien mais juste après ça bug, sa fait bugger windows!!!!!
    Le malloc() dans la fonction de lecture n'est pas bon (mauvaise taille).

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    Normal,

    Essaye ça dans la lecture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Voiture *voit=malloc(sizeof *voit);

  12. #12
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut
    OK Merci beaucoup!!!

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut
    J'ai un autre peti problème, c'est lorsque je fais plusieurs maillons, comment je fais pour les enregistrer, voila ce que j'ai fais :
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
     
     
    typedef struct Voiture        //Définition de la structure Voiture
    {
            char marque[20];
            char modele[20];
            char puissance[3];
            struct Voiture *suivant;
    }Voiture;
     
     
    void Creer (Voiture **p);
    void Ecrire (Voiture *p);
    void Lecture (void);
     
    int main(void)                 
    {      
     
          Voiture *tete=NULL;
    	  Creer (&tete);
    	  Creer (&tete);
    	  Ecrire(tete);
    	  Lecture();
    	  //system("cls");
    	 // printf("%s\n",tete->marque);
    	  //printf("%s\n",tete->suivant->marque);
          free(tete); tete=NULL; /* il faut liberer la memoire. C'est tres imporant */
    	  return EXIT_SUCCESS; 
     
     
     }
     
    void Creer (Voiture **p)        //Définition de la fonction Creer qui est de type Voiture
    {		
    		Voiture *voit=malloc(sizeof *voit);
    		if(voit != NULL)
    		{
    			printf("Entrez la marque :\n");
    			scanf("%s",&(voit->marque));
    			printf("Entrez le modele :\n");
    			scanf("%s",&(voit->modele));
    			printf("Entrez la puissance :\n");
    			scanf("%s",&(voit->puissance));
    			voit->suivant=*p;
    			*p=voit;
    		}        
    }
    void Ecrire(Voiture *p)
    {	
     
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "wb");
    	fwrite(p,sizeof(*p),2, fic);
    	fclose(fic);
    	fic=NULL;
    }
    void Lecture (void)
    {	
    	Voiture *voit=malloc(sizeof *voit);
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "rb");
    	while(fread(voit,sizeof(*voit),2,fic))
    	{
    		printf("%s, %s, %s/n",voit->marque,voit->modele,voit->puissance);
    	}
     
    	fclose(fic);
    }
    ça s'arrète et sa bug windows!!!!
    j'ai mis en plus ds fread le paramètre 2, pour le nbre de maillons (je suis pas que c'est sa!!!)

  14. #14
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par poche
    ça s'arrète et sa bug windows!!!!
    j'ai mis en plus ds fread le paramètre 2, pour le nbre de maillons (je suis pas que c'est sa!!!)
    Il faut réfléchir un peu et ne pas programmer au hasard...

    Tu as une liste chaînée donc pour écrire dans ton fichier, faut parcourir la liste et écrire chaque élément séparément...

    Jc

  15. #15
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    Soit tu utilise la glib (solution simple)
    Ou alors, tu fais une fontion "ajouterVoitureALaListe()"
    Une fonction qui créé une nouvelle voiture et qui la retourne et voila...

  16. #16
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut
    Le programme que je veux faire doit lire un fichier, mettre les infos dans des maillons, ensuite ajouter ou supprimer des maillons, pour enfin enregistrer mes changements dans ce fichier.
    La lecture se fais au début du programme et l'écriture à la fin du programme!!

  17. #17
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut
    J'ai fais ça, mais je ne sais pas comment mettre les infos du fichier texte dans le maillon!!!

    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
    void Ecrire(Voiture *p)
    {	
     
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "wb");
    	while(p!=NULL)
    	{
    		fprintf(fic,"%s %s %s /n",p->marque,p->modele,p->puissance);
    		p=p->suivant;
    	}
    	//fwrite(p,sizeof(*p),2, fic);
    	fclose(fic);
    	fic=NULL;
    }
    void Lecture (void)
    {	
    	Voiture *voit=malloc(sizeof *voit);
    	FILE *fic = NULL;
    	fic = fopen("c:\\test.txt", "rb");
    	while(fread(voit,sizeof(*voit),1,fic))
    	{
    		printf("%s, %s, %s/n",voit->marque,voit->modele,voit->puissance);
    	}
     
    	fclose(fic);
    }

  18. #18
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut
    c'est bon j'ai trouvé!!
    Merci quand même pour votre aide...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire et écrire dans un fichier binaire en VBScript
    Par David_Geek dans le forum VBScript
    Réponses: 0
    Dernier message: 28/08/2010, 14h06
  2. Réponses: 12
    Dernier message: 26/07/2006, 12h08
  3. lire et écrire dans un fichier
    Par karel dans le forum C
    Réponses: 15
    Dernier message: 18/01/2006, 17h24
  4. [FTP] Lire et écrire dans un fichier
    Par dj-julio dans le forum Langage
    Réponses: 49
    Dernier message: 12/01/2006, 11h59
  5. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 20h48

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