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 :

Fichiers binaires et objets T


Sujet :

C++

  1. #1
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut Fichiers binaires et objets T
    Bonjour, j'essaie d'écrire une fonction qui me permet d'écrire un objet dans un fichier binaire.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template <class T>
    void Util::Ecrire(const std::string& filepath, const T& objet) 
    {
        std::ofstream myfile(filepath.c_str(), std::ios::binary);
        if (!myfile) {
            std::cerr << "Erreur d'écriture." << std::endl;
            return;
        }
        myfile.write( reinterpret_cast<const char *>(objet), sizeof(T));
        myfile.close();
    }

    Et je l'appelle en faisait par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Util::Ecrire("banane.cfg", m_glCanvas);
    Mais alors voilà ca ne plante pas cependant ca m'écrit seulement 2 petits caractères dans mon fichier (ce qui ne fait pas vraiment de sens puisque mon objet est quand même volumineux)

    Est-ce qu'il faut quelque chose de spécial à mon constructeur de copie car la j'ai seulement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GL_MAILLAGE(const GL_MAILLAGE &mesh);

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Si tu prenais l'adresse de l'objet, ca irait vraissemblablement plus dans le sens que tu desires.

    Quant a savoir si faire un tel dump de la memoire est quelque chose a faire, mon point de vue c'est que c'est non. Ca pose un tas de problemes de portabilite, parfois meme simplement en changeant les flags. Ceci bien sur en considerant que tu n'as pas de pointeur, de references ou des membres qui en ont dans ta classe parce qu'alors les conditions dans lesquelles ca marche sont encore plus restreinte.

    La bonne methode, c'est de se definir explicitement un format et explicitement des fonctions qui le sauve et le charge. C'est plus long, mais ca marche de maniere beaucoup plus sure.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Bonjour, merci pour la réponse.

    Désolé j'ai du mal à saisir ce que tu essaies de me faire comprendre

    Si tu prenais l'adresse de l'objet
    Ou ca?


    et qu'entends tu par "dump de la mémoire" ?


    Écrire des objets en binaire c'est mal ?

    En fait ce que je veux est sauvegarder mon objet en fichier exemple config.cfg et plus tard l'utilisateur peut ouvrir cet objet et je prend les configurations (couleurs tailles etc) de cet objet et je les affecte à l'objet courant.

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Oui, c'est très mal
    Regarde du côté de la serialization et serialize de boost.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ou ca?
    myfile.write( reinterpret_cast<const char *>(&objet), sizeof(T));
    et qu'entends tu par "dump de la mémoire" ?
    Simplement ce que tu fais là, c'est-à-dire écrire brutement le contenu de la mémoire dans un fichier.

    Écrire des objets en binaire c'est mal ?
    De cette façon, et dans un certain contexte, oui. Imagine comme Jean-Marc te le disait, que ton objet m_glCanvas ait en donnée membre un pointeur : son adresse sera inscrite dans le fichier, ce qui n'est pas d'une grande utilité.

  6. #6
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Je vois, il est d'autant plus mal que les fichiers binaires ne sont pas identiques sous Unix et sous Windows si je ne me trompe pas ?

    Je crois que je vais garder ma méthode avec fichier texte, même si elle est un peu moins propre et plus complexe.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Toujours comme l'a dit Jean-Marc, tu peux tout à fait mettre en place un mécanisme de chargement / sauvegarde de tes objets, qui soit indépendant de la méthode utilisée. Chaque objet saura se lire / écrire dans un fichier, que ce soit en binaire ou sous forme textuelle importe peu au final.

    Concernant le mode texte, c'est la meilleure solution car compréhensible par l'homme, et surtout portable. Ensuite, si tu as des contraintes de cryptage ou de taille des fichiers, là c'est une autre histoire.

  8. #8
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par vdumont
    Je vois, il est d'autant plus mal que les fichiers binaires ne sont pas identiques sous Unix et sous Windows si je ne me trompe pas ?
    Les différences ne sont pas particulièrement une question d'OS mais plutôt d'architecture. Par exemple en mode 32 ou 64 bits ca risque fort de ne pas être pareil.

    Je crois que je vais garder ma méthode avec fichier texte, même si elle est un peu moins propre et plus complexe.
    Quelque chose qui a un format défini est a priori plus propre que quelque chose dont le format dépend de facteurs non maîtrisé.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

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

Discussions similaires

  1. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  2. [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
  3. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  4. 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