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 :

Quel type de fichier de config utiliser? XML? INI?


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut Quel type de fichier de config utiliser? XML? INI?
    Bonjour,

    J'aimerais stocker des paramètres dans un fichier de config (nombre de threads à lancer, port d'écoute utilisé, maximum de personne en file d'attente, ...).

    Pourriez-vous me conseiller sur le type de fichier à utiliser, pour avoir une solution robuste, simple, rapide, et portable (utilisable aussi bien sous Linux, Windows, et Mac) ?

    J'ai en particulier entendu parler de fichiers ini et xml, mais je ne sais pas quelle est la meilleure solution. XML semble moins utilisée en C++ (plutot utilisée pour le web), et les fichiers ini semblent être en voie de disparition...

    Bref quelle est la solution couramment utilisée pour lire/éditer les fichiers de config actuellement? Existe-t'il des fonctions standardisées permettant la lecture de ces fichiers, que ce soit sous Windows ou sous Linux?

    Merci d'avance pour vos réponses!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 28
    Points
    28
    Par défaut
    Tu peux utiliser Boost.program_options qui est mal du tout et qui permet de lire une configuration aussi bien de la ligne de commande que d'un fichier.

  3. #3
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Le soucis est que j'aimerais inclure un minimum de librairies externes : je vais créer des threads, des sockets, une interface graphique, éventuellement la gestion du son plus tard... Le tout le plus portable possible. Je ne me vois pas utiliser 36 librairies différentes, dont je ne controlerais pas la qualité/l'évolution.

    En continuant mes recherches, j'ai entendu parler de Boost, qui semble gérer les threads et les socket, mais le documentation me semble un peu ostère... Il peut faire plein de choses, mais c'est pas vraiment bien expliqué ^^

    J'ai aussi lu du bien de SDL (en particulier SDL_NET) pour ce qui est du réseau, et ça semble encore être une librairie assez généraliste.

  4. #4
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    861
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 861
    Points : 716
    Points
    716
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XML semble moins utilisée en C++ (plutot utilisée pour le web)
    -> Je ne suis pas d'accord. XML est parfait comme fichier de configuration.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    les fichiers ini semblent être en voie de disparition
    -> Je suis d'accord.

  5. #5
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Bon ok, vous m'avez convaincu (vous et mes recherches ), je vais opter pour du XML.

    Reste à trouver un parseur (il me semble que c'est comme ça qu'on appelle ça ), me permettant de lire et d'éditer ce type de fichier.

    Auriez-vous des librairies à me conseiller?
    Mon but :
    - Robustesse : un code propre, qui n'affiche pas 36 warning/erreur si on n'utilise pas le même compilateur que celui ayant créé le module ^^
    - Fonctionnalités de base : lire une entrée, la modifier, à la limite en ajouter une... C'est tout ... Pour le moment
    - Rapidité : pas une usine à gaz qui sait faire plain de chose, mais qui est leeeeente
    - Simplicité d'utilisation : pas 36 trucs à bidouiller pour l'installer, que ce soit sous Linux ou sous Windows (un fichier à inclure serait parfait); pas 36 paramètres à passer, variables à initialiser, ...

    Bref un truc simple et propre ^^

    J'ai entendu parler pour le moment de TinyXML et de libXML. Je suis entrain d'essayer d'en savoir plus à leur sujet, leurs avantages et inconvéniants, leur facilité d'installation/d'utilisation... Mais si vous avez des avis à partager, ils sont biensûr les bienvenus!

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Le XML c'est overkill comme solution pour des fichiers d'initialisation. (quand en plus on voit que des solutions tout XML reposent sur des .properties qui sont eux de bêtes .rc ... il y a de quoi se poser des questions).

    Le .rc est ce qu'il y a de plus simple et passe partout. C'est du .ini en plus simplifié (pas de sections). boost.program_options est parfait pour cela.

    N'espère pas éditer ton .xml à la main, l'XML n'est pas fait pour ça. Un .rc ou un .ini, c'est fait pour. Si tu ne voulais pas introduire de dépendances et autres trucs compliqués, tu t'es trompé de techno avec l'XML.


    Si à termes tu dois utiliser une bibliothèque de fenétrage, alors choisis-en une dès maintenant, et regarde les solutions qu'elle propose pour gérer fichiers de conf, sockets, threads, ... Souvent les frameworks de fenétrage font plus que juste les fenêtres.

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Bayard Voir le message
    -> Je ne suis pas d'accord. XML est parfait comme fichier de configuration.
    Moi je trouve que c'est vraiment utiliser un rouleau compresseur pour écraser une mouche. C'est plus long et difficile d'installer et d'apprendre à utiliser un parseur XML que de faire la lecture du fichier de config à la main, dans un format simple, une entrée par ligne, une tabulation entre la clé et la valeur, par exemple.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    pour parser un fichier ini, tu peux utiliser SimpleIni et directement inclure ses 3 fichiers dans ton projet.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Sylvain Togni Voir le message
    C'est plus long et difficile d'installer et d'apprendre à utiliser un parseur XML que de faire la lecture du fichier de config à la main, dans un format simple, une entrée par ligne, une tabulation entre la clé et la valeur, par exemple.
    C'est pas forcément beaucoup plus long: TinyXML est super simple a utiliser pour ce genre de choses et très efficace.

  10. #10
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    861
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 861
    Points : 716
    Points
    716
    Par défaut
    N'espère pas éditer ton .xml à la main, l'XML n'est pas fait pour ça.
    -> 1) un simple éditeur fonctionne à merveille.
    -> 2) en double cliquant dessus Internet Explorer permet de voir le fichier sans le modifier. Excellent si l'on ne désire pas qu'un utilisateur modifie le fichier.


    http://sourceforge.net/projects/tinyxml/

    Bonne journée.

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Citation Envoyé par Bayard Voir le message
    (snip)
    -> 2) en double cliquant dessus Internet Explorer permet de voir le fichier sans le modifier. Excellent si l'on ne désire pas qu'un utilisateur modifie le fichier.
    Heuu, à condition que l'utilisateur n'aie pas un logiciel pour la création de site web qui aurait redéfini l'association avec xml à son profit

    Et avec l'engouement actuel pour la création de sites web, tu peux te dire que la probabilité est grande

    De plus, je rejoins l'avis selon lequel un fichier xml est peut être un peu ... excessif s'il ne s'agit que de sauvegarder quelques données de configuration.

    Et, comme l'a indiqué luc, les bibliothèques graphiques actuelles fournissent généralement une solution pour la grosse majorité des besoins énoncés par ChriGoLioNaDor en plus de la gestion d'options de configurations...

    Du coup, je ne peux que plussoter avec son conseil de choisir dés maintenant la bibliothèque graphique, et de lui laisser faire tout le boulot pour lequel elle est prévue (gestion configuration, socket, threads, ...) ce qui rejoindra, enfin, le dernier besoin de ChriGoLioNaDor qui est d'éviter d'apporter des dépendances de tous côtés...

    @ ChriGoLioNaDor==> Si tu te rallie à mes arguments (et à ceux de luc), les principales bibliothèques graphiques portables sont QT, wxWidget et gtkmm...

    Il faut savoir que QT, par exemple, est soumis à licence si tu décide de ne pas fournir ton application sous les termes de la licence GNU/GPL... mais, est tout à fait gratuit si tu décide de le fournir sous cette licence.

    wXwidget est, pour sa part, un pur produit Open Source, sauf erreur

    Je ne suis malheureusement pas certain que gtkmm soit portable (je ne l'ai jamais utilisé), mais c'est aussi un produit soumis à la licence GNU/GPL

    Tu devrais trouver, dans le forum et dans la FAQ, à peu près toutes les informations que tu pourrais souhaiter

  12. #12
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Citation Envoyé par Bayard Voir le message
    -> 1) un simple éditeur fonctionne à merveille.
    -> 2) en double cliquant dessus Internet Explorer permet de voir le fichier sans le modifier. Excellent si l'on ne désire pas qu'un utilisateur modifie le fichier.
    1) Ce n'est pas ce que j'appelle maintenable. Sans parler de la facilité avec laquelle cela se corromp

    2) Là, je ne vois plus l'intérêt d'appeller ça un fichier de conf.

  13. #13
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    En fait je pensais utiliser WxWidgets, qui gère justement tout ce qui est thread et socket. Par contre je n'ai pas vu qu'il gérait les fichiers de configuration.

    Après lecture, il est vrai que ça semble un peu complexe d'utiliser XML pour gérer les options : je n'en aurais pas ennormément, je n'utiliserais pas de section, et pour modifier le fichier à la main rapidement... :S

    Par contre, je pense l'utiliser pour la gestion des fenêtes : un fichier XML pourrait me servir à décrire les éléments d'une fenêtre (position, taille, options, position des boutons, ...). Le but étant d'avoir une possibilité de modifier/créer une interface utilisateur facilement. Mais là on sort du cadre du sujet initial...

  14. #14
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Bonjour,

    personnellement, pour un fichier de configuration, le .ini, y a pas plus rapide, a moins de stocker de tableau de structure où là, a la limite ca peux etre interessant.

    Encore une fois, *personnellement*, cette mode de mettre du XML de partout devient limite masochiste.

  15. #15
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par ChriGoLioNaDor Voir le message
    En fait je pensais utiliser WxWidgets, qui gère justement tout ce qui est thread et socket. Par contre je n'ai pas vu qu'il gérait les fichiers de configuration.
    Si, la classe s'appelle wxConfig.

    Par contre, je pense l'utiliser pour la gestion des fenêtes : un fichier XML pourrait me servir à décrire les éléments d'une fenêtre (position, taille, options, position des boutons, ...). Le but étant d'avoir une possibilité de modifier/créer une interface utilisateur facilement.
    C'est exactement ce que propose le système de ressource de wxWidgets qui se nome XRC

  16. #16
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    861
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 861
    Points : 716
    Points
    716
    Par défaut
    OK, je propose

    Fichier simple: -> .INI
    Fichier complexe (par exemple avec structure en arbre): -> .XML

  17. #17
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    C'est à peu près cela...

  18. #18
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    J'irai même jusqu'à dire :
    - fichier humainement modifiable : .ini/.totorc
    - fichier géré (lecture ET écriture) par l'outil : xml

    Pour les arborescences, un peu d'imagination dans les noms des paramètres suffit amplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # un commentaire
    arbre1.noeud1.toto = valeur
     
    arbre2.noeud42.sous-noeud.toto = 42

  19. #19
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Merci beaucoup pour toutes ces précisions, vous m'avez fait gagné un temps précieux!

    Je classe le sujet en [Résolu]

  20. #20
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Attention:
    Reste à savoir OÙ placer le fichier de configuration : Si c'est dans le même dossier que le programme, ça signifie que seuls les adiministrateurs peuvent modifier la config...

    Sous Linux, il faut donc placer le fichier dans $HOME, sous Windows, généralement dans le dossier Application Data de l'utilisateur (%APPDATA% ou SHGetSpecialFolderPath()) ou, de préférence, en base de registre (HKEY_CURRENT_USER\Software\NomDeLEntreprise\NomDeLApplication)...

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

Discussions similaires

  1. Fichier de config en xml
    Par Mathew77 dans le forum C#
    Réponses: 2
    Dernier message: 31/12/2009, 11h27
  2. [8.04] Quel est le fichier de config pour paramétrer le proxy ?
    Par Giovanny Temgoua dans le forum Ubuntu
    Réponses: 3
    Dernier message: 08/10/2008, 22h36
  3. Quel type de fichier image pour icon ?
    Par hugobob dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/03/2007, 12h02
  4. Réponses: 6
    Dernier message: 26/04/2006, 15h13
  5. Réponses: 0
    Dernier message: 26/04/2006, 13h01

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