Ecriture et lecture de class dans un fichier

Résolu
Dam06 Messages postés 2 Date d'inscription vendredi 27 avril 2007 Statut Membre Dernière intervention 17 avril 2008 - 15 avril 2008 à 15:29
Dam06 Messages postés 2 Date d'inscription vendredi 27 avril 2007 Statut Membre Dernière intervention 17 avril 2008 - 17 avril 2008 à 10:26
Bonjour à tous,

Alors je vous explique mon problème:
J'ai une classe "Evnt_Horodate" declarée comme ceci:

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:

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:

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:

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 !

1 réponse

Dam06 Messages postés 2 Date d'inscription vendredi 27 avril 2007 Statut Membre Dernière intervention 17 avril 2008
17 avril 2008 à 10:26
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:

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
class Element
{public:
int data;
int date;
 
void Copier(Element *source);
};
 
void Element::Copier(Element *source){
data = source->data;
date = source->date;
}

<!-- END TEMPLATE: bbcode_code -->et dans la fonction d'ecriture:

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
//Parametrage de l'objet evnt_horodate
evnt_horodate->flag_initialise = 1;
evnt_horodate->flag_suppression = 0;
evnt_horodate->element.Copier(element);
 

<!-- END TEMPLATE: bbcode_code -->Bonne journée à tous !
3
Rejoignez-nous