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 :

Sauvegarder/Lire une classe dans un fichier


Sujet :

C++

  1. #1
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut Sauvegarder/Lire une classe dans un fichier
    Bonjour,

    Je souhaiterais sauvegarder une de mes classes (instanciées) dans un fichier ainsi que d'être capable bien évidemment de la recharger par après ...
    Cette classe contient tout type d'objet, il faudrait que je fasse une copie mémoire.

    Un grand merci d'avance!
    Cordialement,
    Rodrigue
    Rodrigue

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour les cas simples, ça peut se faire directement à l'aides des opérateurs << et >>

    Pour les cas où le format de fichier est imposé, il est souvent simple d'écrire le fichier, mais le lire demande en général l'écriture d'un parseur. Je propose boost::spirit, ou le couple lex/yacc.

    Pour les cas plus complexes, ou un objet contient un vecteur de pôinteurs sur une classe de base qui pointent en fait sur des objets dérivés... boost::serialization est pas mal.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Salut,

    Un grand merci pour ta réponse. J'essaye d'utiliser Boost. Je suis sous Borland C++ Builder 6. Je n'arrive même pas à l'utiliser! J'obtiens le message d'erreur suivant lors de la compilation de l'exemple pour Borland6Ide :
    [Lieur Erreur fatale] Fatal: Unable to open file 'LIBBOOST_SERIALIZATION.LIB'
    J'ai bien cherché après une dll et un .lib mais il n'y a rien ... à mon avis je n'y comprends rien
    Pourriez-vous m'aider svp ?

    Cordialement,
    Rodrigue
    Rodrigue

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour avoir ce fichier, il faut compiler boost. Le mode d'empoi est ici :
    http://www.boost.org/more/getting_started.html
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    J'ai installé Bjam pour créer les .lib mais ce stupide programme essaye de me les installer via VS2003 (que je n'ai pas...) au lieu de BCB. J'ai VS2005beta, Bjam essaye d'ouvrir "C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\bin\VCVARS32.BAT" et génère le message d'erreur suivant :
    ---------------------------
    cl.exe - Composant introuvable
    ---------------------------
    Cette application n'a pas pu démarrer car mspdb71.dll est introuvable. La réinstallation de cette application peut corriger ce problème.
    ---------------------------
    OK
    ---------------------------
    J'ai bien executé ce fichier .bat depuis VS2005 mais rien n'y fait...

    Y-a-t'il un moyen de dire à Bjam d'utiliser BCB et d'ignorer mes programmes microsoft ? J'ai vu que dans tools\build il y avait des fichiers de conf, j'ai décomenter les using borland mais rien n'y fait ...

    Cordialement,
    Rodrigue
    Rodrigue

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Normalement, ça se résoud sur le ligne de commande. Un truc du genre :

    bjam "-sTOOLS=boralnd" install

    Mais ne possèdant pas ce compilateur, je n'ai jamais essayé.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Super, ça avance ! Il y a juste un pépin ...
    ...failed updating 80 targets...
    ...skipped 56 targets...
    ...updated 5009 targets...
    Et quand je cherche après 'LIBBOOST_SERIALIZATION.LIB', je vois que cette librairie n'a pas été générée
    Les libs déjà générées ne sont pas disponibles ?

    Cordialement,
    Rodrigue
    Rodrigue

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Là, comme ça, je ne peut pas trop aider à distance. Es-tu certain de ne pas avoir lors des essais précédents cassé quelquechose ? Peut-être le mieux est-il de repartir de zéro (retélécharger tout, puis recommencer) ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    ******************************************************
    Building Boost.Iostreams with bzip2 support disabled. ECHO To enable bzip2, consult the Boost.Iostreams documentation
    ******************************************************
    ******************************************************
    Building Boost.Iostreams with zlib and gzip support disabled.
    To enable zlib and gzip, consult the Boost.Iostreams documentation
    ******************************************************
    ---------------------------------------------------------------------
    *** If you don't need Boost.Python, you can ignore this section ***
    *** pass --without-python to suppress this message in the future ***

    skipping Boost.Python library build due to missing or incorrect configuration

    couldn't find Python.h in "c:/tools/python/include"

    You can configure the location of your python installation by setting:
    PYTHON_ROOT - currently "c:/tools/python"
    PYTHON_VERSION - The 2-part python Major.Minor version number (e.g.
    "2.2", NOT "2.2.1") - currently "2.2"

    The following are automatically configured from PYTHON_ROOT if not
    otherwise set:

    PYTHON_LIB_PATH - path to Python library object; currently
    "c:/tools/python/libs"
    ---------------------------------------------------------------------
    Building Boost.Regex with the optional Unicode/ICU support disabled.
    Please refer to the Boost.Regex documentation for more information
    (and if you don't know what ICU is then you probably don't need it).
    **** spirit 1.6x required to build library with this compiler ****
    **** skipping build of <@boost!libs!serialization!build>libboost_serialization.lib; toolset= borland variant= debug ****

    [...]

    Post coupé car trop long et déformant le forum. Merci de faire attention à l'avenir
    Rodrigue

  10. #10
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Désolé pour la longueur du post. J'ai redirigé toute stdout vers un fichier car ça défilait trop vite pour que je vois quoi que ce soit comme message d'erreur !
    La première remarque est :
    **** skipping build of <@boost!libs!serialization!build>libboost_serialization.lib; toolset= borland variant= debug ****
    Ah déjà il est désactivé ... Ca explique pourquoi il n'est pas généré. Maintenant reste à savoir pourquoi il est désactivé !


    Deuxième remarque :
    Dynamic linking Boost.Filesystem does not work for Borland; use static linking instead *** 1 erreurs dans la compilation ***
    Comment lui dire de faire des link static ? J'ai bien trouvé ça mais je ne vois pas où passer cette commande :
    There are additional options as supported by Boost.Build and Boost.Jam. Of the additional options perhaps the most imporant is "-sBUILD=<features/variants>" which lets you override what is built by default. The "<features/variants>" value is a list, separated by spaces, of build requests. Features take the form of a tag and a value or values. And variants are single symbolic names for a collection of features. For example the default is to request "debug release <runtime-link>static/dynamic <threading>single/multi", in which "debug" and "release" are variants, and the rest features with two values each.
    Merci pour votre patience!

    Cordialement,
    Rodrigue
    Rodrigue

  11. #11
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    En fait, la première remarque est :
    spirit 1.6x required to build library with this compiler ****

    Peut-être auras-tu de la chance en regardant ici :
    http://www.boost.org/libs/serialization/doc/implementation.html#othercompilerissues
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Sauvegarde des champs d'une classe dans un fichier
    Par AlfredKr dans le forum Débuter
    Réponses: 1
    Dernier message: 15/10/2012, 14h39
  2. [PHP 5.3] Sauvegarder les propriétés statiques d’une classe dans un fichier
    Par geforce dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2010, 03h05
  3. Sauvegarder une CLASSE dans un fichier ?
    Par supergrey dans le forum C++
    Réponses: 5
    Dernier message: 10/05/2008, 18h33
  4. Réponses: 4
    Dernier message: 10/02/2005, 16h10
  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