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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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!!!

  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
    change aussi le fwrite !

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

  6. #6
    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).

  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
    Ha oui, c'est vrai... Oula, c'est loin, mais je m'en souvient oui !!!

  8. #8
    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);

  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
    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 !

  10. #10
    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

  11. #11
    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 : 45
    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

+ 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