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 :

Ecriture et lecture de class dans un fichier


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Ecriture et lecture de class dans un fichier
    Bonjour à tous,

    Alors je vous explique mon problème:

    J'ai une classe "Evnt_Horodate" declarée comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Evnt_Horodate
    	{
    	    public:
    	    int flag_suppression;
    	    int flag_initialise;
    	    Element element; //Classe Element
    	};
    Elle contient un objet element de la classe Element declarée comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Element
    {
        public:
        int data;
        int date;
    };
    Je voudrais stocker cette classe dans un fichier binaire et pouvoir la relire par le suite.
    Ma fonction d'écriture:
    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
    void ajouter(Element *element)
    {
        //Ouverture du fichier
        ofstream fichier_ecriture("Stockage.txt",ofstream::binary);
     
        //Creation de l'objet evnt_horodate a ecrire
        Evnt_Horodate *evnt_horodate;
        evnt_horodate = new Evnt_Horodate();
        event_horodate->element.date = 15;
     
        //Parametrage de l'objet evnt_horodate
        evnt_horodate->flag_initialise = 1;
        evnt_horodate->flag_suppression = 0;
     
     
        if(fichier_ecriture)
        {
            //Position de l'octet
            int adresse_octet = 0;
     
            //Positionnement du curseur dans le fichier
            fichier_ecriture.seekp(adresse_octet,ios::beg);
     
            cout<<"Ajout d'un élement"<<endl;
            //Ecriture de la classe
            fichier_ecriture.write((char*) evnt_horodate, sizeof(Evnt_Horodate));
     
            //Fermeture du fichier
            fichier_ecriture.close();
        }
        else
        {
            TRACE("erreur d'ecriture dans le fichier !");
        }
     
        //Destruction des objets
         delete evnt_horodate;
         delete element;
    }
    Et ma fonction de lecture:
    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
    void lire()
    {
                int date_lue;
     
                //Creation d'un objet de type Evnt_Horodate pour la lecture
                Evnt_Horodate *evnt_horo_lecture;
                evnt_horo_lecture = new Evnt_Horodate();
     
                //Ouverture en lecture du fichier Stockage.txt
                ifstream fichier_lecture;
                fichier_lecture.open("Stockage.txt",ios::binary);
     
                if(fichier_lecture)
                {
                    //Positionnement du curseur dans le fichier
                    fichier_lecture.seekg(0,ios::beg);
     
                    //Lecture de l'evenement
                    fichier_lecture.read((char*) evnt_horo_lecture, sizeof(Evnt_Horodate));
     
                    //Lecture de la date de cet evenements
                    date_lue = evnt_horo_lecture->element.date;
                    cout<<"date lue :"<<date_lue<<endl;
     
                    //Fermeture du fichier
                    fichier_lecture.close();
                }
                else
                {
                    cout<<"Erreur de lecture dans le fichier !"<<endl;
                }
     
                //Destruction de l'objet evnt_horo_recherche
                delete evnt_horo_lecture;
     
     }
    Le fichier est bien créé et mon programme y écrit bien.
    Mais "date_lue" qui devrait me renvoyer la valeur date de l'objet "element" contenu dans l'objet evnt_horo_lecture, reste toujours à 0...

    Vous voyez un problème dans mon code ?

    Je vous remercis par avance !

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Je viens de trouver le problème, mes fonctions de lecture et ecriture marchent trés bien en faite !

    Pour ce que ca interresse voila ou était le problème:

    Il falait rajouter une fonction de copie dans la classe Element, pour pouvoir copier l'objet element dans les objet ecrits dans le fichier !

    Class Element:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Element
    {
        public:
        int data;
        int date;
     
        void Copier(Element *source);
    };
     
    void Element::Copier(Element *source)
    {
        data = source->data;
        date = source->date;
    }
    et dans la fonction d'ecriture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Parametrage de l'objet evnt_horodate
        evnt_horodate->flag_initialise = 1;
        evnt_horodate->flag_suppression = 0;
        evnt_horodate->element.Copier(element);
    Bonne journée à tous !

Discussions similaires

  1. Ecriture/lecture de Properties dans un fichier
    Par Heero_2040 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 14/01/2007, 22h01
  2. Réponses: 4
    Dernier message: 10/02/2005, 16h10
  3. Ecriture d'un seul bit dans un fichier
    Par fantomasmusic dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 31/01/2005, 19h21
  4. Problème lecture de nombre dans un fichier en c++
    Par knecmotet dans le forum C++
    Réponses: 1
    Dernier message: 28/10/2004, 15h48
  5. [C#] [.NET] Lecture d'une classe dans un fichier
    Par niPrM dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/05/2004, 08h57

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