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 :

Stockage fichier binaire


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Stockage fichier binaire
    Bonjour à vous!

    J'ai un projet qui consiste à gérer un stock de produits... Ca n'a pas l'air difficile et à vrai dire ce ne l'est pas, mais je bloque sur une chose : le stockage des donnees dans un fichier binaire... Voici les principales fonctions que j'ai déjà implémenté...avec le .h correspondant :

    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
     
    #ifndef H_Stock01
    #define H_Stock01
     
     
    typedef struct{
     
    	char titre[41], auteur[41], editeur[41];
     
    	int annee;
     
    }PRODUIT;
     
    void AfficheProduit(PRODUIT *);
    void NouvProduit(PRODUIT *);
    int OpenProd();
    #endif
    Voici à proprement parler les fonctions :

    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
     
    #include<stdio.h>
    #include<string.h>
    #include"Lecture.h"
    #include"Stock01.h"
     
     
    void AfficheProduit(PRODUIT * prod)
    {
     
    	printf("\n\nAuteur : %s",prod->auteur);
    	printf("\nEditeur : %s",prod->editeur);
    	printf("\nTitre : %s",prod->titre);
    	printf("\nAnnee : %d",prod->annee);
    }
     
    void NouvProduit(PRODUIT *prod)
    {
     
    	printf("\n\nEntrez un titre : ");
    	gets(prod->titre);
     
    	printf("\nEntrez un editeur : ");
    	gets(prod->editeur);
     
    	printf("\nEntrez un auteur : ");
    	gets(prod->auteur);
     
    	printf("\nEntrez une annee : ");
    	scanf("%d",&(prod->annee));
     
    	fflush(stdin);
     
    }
     
     
    int OpenProd()
    {
    	PRODUIT * prod;
    	FILE * pstream;
     
    	pstream=fopen("..\\Produits.bin","rb");
    	if(!pstream) return 0;
     
    	while( fread(&prod,sizeof(prod), 1, pstream),!(feof(pstream)||ferror(pstream))){
    		AfficheProduit(&prod);
    	}
     
    	return 1;
    }
    Je crée maintenant une fonction main afin d'utiliser les fonctions et de vérifier leur validité. Pour cela, je crée un produit et je le sauvegarde dans un fichier, je recrée un et je le remes à la suite. J'essaye ensuite d'afficher le tout et là... bug rien de bon s'affiche... Pouvez-vous me dire pourquoi svp?

    Voici le main :

    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
     
     
     
    int main()
    {
    	PRODUIT prod;
     
    	FILE *pstream;
     
     
    	pstream=fopen("..\\Produits.bin","wb");
    	if(!pstream) return 0;
     
     
    		do
    	{
     
     
     
    	NouvProduit(&prod);
    	fwrite(&prod, sizeof(prod), 1, pstream);
     
    	if(ferror(pstream)) {
     
    		printf("\nErreure d'ecriture");
    		break;
    	}
     
     
    	}
    	while( Encore(" \nEntrer un nouveau produit ? ", 'o' , 'n' ) );
     
            //La fonction encore vient d'un autre module et sert juste à demander pour continuer 
     
    	fclose(pstream);
     
     
    	OpenProd(); //Voilà ce qui devrait ouvrir le fichier et l'afficher
    	Encore(" \nQuitter ", 'o' , 'n' );
     
    	return 0;
    }
    Maintenant petite critique par rapport à ce projet donné en classe... Ne serait-ce pas plus simple de le faire en C++ et de créer une classe produit et des méthodes sur les produits et de gérer tous les flux comme en C++ ? J'ai cette impression en fait. Qu'en pensez-vous ?

    Merci à vous !

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par -WanG-
    Bonjour à vous!

    J'ai un projet qui consiste à gérer un stock de produits... Ca n'a pas l'air difficile et à vrai dire ce ne l'est pas, mais je bloque sur une chose : le stockage des donnees dans un fichier binaire... Voici les principales fonctions que j'ai déjà implémenté...avec le .h correspondant :
    Ne compile pas... (#include "lecture.h" supprimé). Merci de poster du code compilable si tu veux qu'on t'aide rapidement...
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: stock01.c
    In file included from stock01.c:6:
    Stock01.h:16:7: warning: no newline at end of file
    stock01.c: In function `OpenProd':
    stock01.c:47: warning: passing arg 1 of `AfficheProduit' from incompatible pointer type
    Compiling: main.c
    main.c: In function `main':
    main.c:4: error: `PRODUIT' undeclared (first use in this function)
    main.c:4: error: (Each undeclared identifier is reported only once
    main.c:4: error: for each function it appears in.)
    main.c:4: error: syntax error before "prod"
    main.c:6: error: `FILE' undeclared (first use in this function)
    main.c:6: error: `pstream' undeclared (first use in this function)
    main.c:9: warning: implicit declaration of function `fopen'
    main.c:18: warning: implicit declaration of function `NouvProduit'
    main.c:18: error: `prod' undeclared (first use in this function)
    main.c:19: warning: implicit declaration of function `fwrite'
    main.c:21: warning: implicit declaration of function `ferror'
    main.c:23: warning: implicit declaration of function `printf'
    main.c:29: warning: implicit declaration of function `Encore'
    main.c:33: warning: implicit declaration of function `fclose'
    main.c:36: warning: implicit declaration of function `OpenProd'
    Process terminated with status 1 (0 minutes, 2 seconds)
    7 errors, 10 warnings
    Maintenant petite critique par rapport à ce projet donné en classe... Ne serait-ce pas plus simple de le faire en C++<...>
    Si on t'a demandé de le faire en C, non.

    Après mise au point :
    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
     
     
     
    Entrez un titre : aaa
     
    Entrez un editeur : bbb
     
    Entrez un auteur : ccc
     
    Entrez une annee : 1000
     
    Entrer un nouveau produit ?  (o/n) : o
     
     
    Entrez un titre : xxx
     
    Entrez un editeur : yyy
     
    Entrez un auteur : zzz
     
    Entrez une annee : 2000
     
    Entrer un nouveau produit ?  (o/n) : n
     
     
    Auteur : ccc
    Editeur : bbb
    Titre : aaa
    Annee : 1000
     
    Auteur : zzz
    Editeur : yyy
    Titre : xxx
    Annee : 2000
    Quitter  (o/n) : o
     
    Press ENTER to continue.
    La presentation est horrible, mais ça fonctionne correctement...

    Ceci dit, il y aurait beaucoup à dire sur l'usage d'un format binaire 'natif' (càd repésentation mémoire) pour stocker des données dans un fichier. Pour du quick'n dirty jetable, c'est acceptable. Pour de l'industriel portable multi-plateforme, c'est poubelle direct.

    En pièces jointes, ton code commenté et réparé.
    Fichiers attachés Fichiers attachés
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Oki merci. Je n'avais aucune erreure et aucun avertissement à la compilation... et je ne pensais que vous iriez jusqu'à vouloir le refaire et le compiler donc je n'avais pas mis entièrement le projet lol.

    Merci d'avoir jeté un coup d'oeil, c'était au niveau de la sauvegarde des donnees que ça foirait mais pas pour les entrer en fait.

    Merci à toi!

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Je viens de jeter un coup d'oeil à mon programme et à ta correction... l'erreure venait du pointeur dans OpenProd() ! Je ne sais pas pq j'avais mis un pointeur... c'est vraiment idiot. Erreure d'inatention lol

    Merci encore ++

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par -WanG-
    c'était au niveau de la sauvegarde des donnees que ça foirait mais pas pour les entrer en fait.
    Non. La sauvegarde était correcte, mais la lecture était défectueuse.
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Stockage de données dans un fichier binaire
    Par Dayodavor dans le forum MATLAB
    Réponses: 2
    Dernier message: 07/01/2010, 13h52
  2. Stockage de données dans un fichier binaire
    Par DarkSeiryu dans le forum Windows Forms
    Réponses: 35
    Dernier message: 09/06/2009, 02h41
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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