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 :

Où sauvegarder des données d'application?


Sujet :

C++

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 44
    Points : 78
    Points
    78
    Par défaut Où sauvegarder des données d'application?
    Bonjour,

    Je voudrais savoir s'il y avait des recommandations concernant la sauvegarde de certaines données d'une application?
    Je m'explique, j'ai une application pour laquelle j'aimerai sauvegarder certaines préférences et je voudrai le faire dans un fichier. Ces préférences peuvent être de différents types, par exemple : dernier fichier utilisé, log d'actions, ...

    Supposons que j'ai une application "monappli", la première idée qui m'est venu était d'enregistrer un fichier de préférence "mypref.xml" dans le répertoire :
    #sous windows
    "%USERPROFILE%/.monappli"
    #sous unix
    "$HOME/.monappli"

    Le répertoire .monappli me permettant ainsi de regrouper d'autres fichiers.

    Serait-ce la bonne méthode?
    J'ai constaté que certaines applications mettaient certains de leurs fichiers dans "%USERPROFILE%/Application Data/monappli" où mon appli est un nom d'application quelconque (par exemple Mozilla).
    Je me dis que je pourrais aussi le faire mais une autre question se pose : Le répertoire "Application Data" s'appelle t'il toujours ainsi? Selon la langue, est-ce que ça ne va se changer en "Données d'application" (pour le fr) par exemple?
    Dans ce cas existe t'il une variable d'environnement définissant le nom de "Application Data"?
    J'ai vu qu'il y avait une variable d'environnement %APPDATA%. Est t'elle forcément définie?
    Sous Vista, ces variables restent t'elles les mêmes?
    Sous Windows, je pourrais aussi mettre mes données d'application dans %ALLUSERSPROFILE% mais sous Unix?
    Sous Unix, on a la variable $HOME pour le compte utilisateur mais existe t'il une variable permettant de définir des données globales à tous les utilisateurs?

    Autre truc, j'ai un fichier de licence pour cette application. Où serait t'il le plus simple de le copier? dans le répertoire %USERPROFILE%/.monappli (et $HOME/.monappli) ? Je sais que le plus simple serait le répertoire où est déployé mon application mais là ce qui m'embête c'est Unix! On doit faire face à des sociétés qui gèrent de façon très stricte les droits sur les répertoires. Du coup c'est souvent un administrateur système qui s'occupe de faire les installs et quand un utilisateur lambda veut utiliser une application, il ne pourra pas les droits pour modifier le repertoire de l'application du coup enregistrer automatiquement un fichier dans le répertoire de l'appli me semble pas la bonne solution.

    Tous vos conseils, avis sur la question seront les bienvenus

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    La façon de faire des applications "sérieuses" c'est bien celle qui consiste à mettre dans Application Data sous win, dans ~/.ton_appli sous linux.

    La license tu peux aussi la mettre là.

    Qu'est-ce qui te gêne dans cette perspective ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Y'a pas une variable d'environnement APPDATA ?
    À part ça, pas de grand rapport avec le C++.
    Boost ftw

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Un autre choix mais qui ne concerne que l'environnement Microsoft, c'est la base de registres

    HKEY_LOCAL_MACHINE pour tout ce qui est global
    et HKEY_CURRENT_USER pour les données spécifiques utilisateur
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 44
    Points : 78
    Points
    78
    Par défaut
    La façon de faire des applications "sérieuses" c'est bien celle qui consiste à mettre dans Application Data sous win, dans ~/.ton_appli sous linux.
    Sous linux, supposons que l'admin installe l'application dans le répertoire /opt/monappli (accessible par tous). Soit un utilisateur User1, il va lancer l'appli et elle va lui demander un fichier de licence. L'appli va copier automatiquement cette licence dans le répertoire ~/.monappli. OK ça marchera toujours pour User1. Si un utilisateur User2 lance l'appli, celle-ci va chercher dans ~/.monappli pour voir si la licence y est or elle n'y sera pas puisqu'elle est dans le $HOME de User1. L'appli va lui redemander la licence mais, justement, c'est ce que je voudrais éviter. Tu vois mon souci?

    Y'a pas une variable d'environnement APPDATA ?
    À part ça, pas de grand rapport avec le C++.
    Pour APPDATA, je sais qu'elle existe (j'en ai parlé dans mon post) mais la question c'était est t'elle toujours définie? Bon j'ai eu ma réponse, elle est toujours définie au niveau Windows (de la même façon que USERPROFILE)

    À part ça, pas de grand rapport avec le C++.
    Désolé je ne l'ai pas précisé mais je suis dans un contexte C++. Du coup, je voulais savoir s'il existait une méthode C++ qui permette de récupérer un répertoire accessible pour ajouter des données d'application, une sorte de getSystemAppData() ou un truc dans le genre comme ça ça serait encore plus simple, ça serait standard et je serai bien content .

    HKEY_LOCAL_MACHINE pour tout ce qui est global
    et HKEY_CURRENT_USER pour les données spécifiques utilisateur
    Effectivement, mais malheureusement on veut éviter d'aller fouiller dans la base de registres. Si ça tenait qu'à moi, je le ferai mais bon...

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Pour obtenir le chemin de Application Data sous Windows, on est supposé utiliser la fonction SHGetFolderPath().

    Ou bien, pour des paramètres de configuration, les mettre dans HKEY_CURRENT_USER\Software\titchagui\MonApplication
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 106
    Points : 153
    Points
    153
    Par défaut
    Sous windows, si on separe en 3 les types fichiers necessaires:

    A. les fichiers statiques d'application commun (en general "program files").

    B. CSIDL_COMMON_APPDATA / les fichiers temporaires d'application (par example un systeme d'auto update qui doit telecharger un patch, car impossible de creer un fichier dans "program files" sans les droits superuser).

    C. CSIDL_LOCAL_APPDATA / les fichiers de config pour chaque utilisateurs.
    Plutot que d'utiliser la registry, pourquoi ne pas mettre un fichier de config xml la dedans?

    Sachant que pour modifier B et C tu n'a pas besoin d'avoir de droits super user (elevated pour Vista). Pour modifier A, tu dois relancer ton application avec ShellExecuteEx et le verb a "run as". Et moi qui pensait qu'il allait simplifier leur systeme avec Vista...

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    La registry n'est à utiliser que pour de *très* rares cas... Il est bien dommage que les programmeurs n'aient pas suivi les recommendations de M$ parceque cette registry est devenu un sacré b...l

    A noter que le HKCU n'est pas toujours disponible (services)... ni le %USERPROFILE%


    Sous linux, il ya /etc pour tout ce qui est config "globale", et ~/.xxxx pour les config "user"...
    Sous Windows, c'est plus compliqué... et tous les chemins sont configurables... (My Documents par exemple ne pointe pas dans %USERPROFILE% chez moi, et je ne parle pas de My Images qui va sur un répertoire commun à tout le domaine).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 106
    Points : 153
    Points
    153
    Par défaut
    Citation Envoyé par nicroman Voir le message
    La registry n'est à utiliser que pour de *très* rares cas... Il est bien dommage que les programmeurs n'aient pas suivi les recommendations de M$ parceque cette registry est devenu un sacré b...l
    Entierement d'accord... mais a mon avis c'est parce que justement c'est le seul endroit ou tu sais que tu peux aller taper dedans de maniere relativement simple sans droits superuser.

    Si MS avait eu des le depart un systeme cler, ca ne serait pas autant le b....l ^^ Dans le genre poubelle, que dire aussi des repertoires temps que tout le monde utilise pour tout et n'importe quoi...

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    La registry est très bien organisée quand on s'en sert correctement...
    Bien sûr, il y a toujours des gens qui se gourent, et qui par exemple, consultent une clé non-documentée de Windows au lieu d'utiliser SHGetFolderPath()...

    Le registre EST censé remplacer les vieux fichiers .ini, avec les paramètres globaux d'une application dans HKLM\Software\Editeur\Application et les paramètres utilisateur dans HKCU\Software\Editeur\Application...

    (évitons de parler de HKCR, qui lui aussi suit des règles spécifiques, seulement ce ne sont pas les mêmes)

    Et bien sûr, une de ses principales fonctions est aussi de pallier au fait que les programmes d'installation laissent à l'utilisateur le choix de l'endroit où il veut placer le programme qu'il installe...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 106
    Points : 153
    Points
    153
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    La registry est très bien organisée quand on s'en sert correctement...
    C'est a dire pas grand monde... Juste pour rigoler, je viens d'exporter ma registry en texte pour voir le nombre de clefs, resultat apres une install XP qui date de 2 ans (et sur ma machine je n'ai que mes applis pro, j'utilise une VM Ware ou mon notebook pour faire joujou)... 226 Mega octets de clefs??

    La plupart des programmes (y conpris ceux estampiller XP Compatible ou Vista Ready machin) laissent des centaines de clefs dans la registry meme apres une desinstallation. Question organisation on a vu mieux. Franchement en 2007, pour remplacer un ".ini" on fait un xml ou autre qu'on met dans CSIDL_COMMON_APPDATA pour les settings globaux et dans CSIDL_LOCAL_APPDATA pour les settings user (en utilisant SHGetFolderPath bien sur). La seule utilisation que j'ai de la registry c'est pour que mon programme apparaissent dans la liste de programme a desinstaller.

    Je suis plutot pro microsoft (il faut que ca arrive), mais si il y a bien une mauvaise reponse a un vrai probleme, c'est bien le design meme de la registry.

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Le problème de désinstallation est un vrai problème, ça je suis prêt à le reconnaître (notamment pour les paramètres utilisateur d'un programme). D'un autre côté, le même problème se présente avec le CSIDL_APPDATA de chaque utilisateur...

    Mais le registre reste nécessaire: Un programme d'autorun d'un CD de jeu par exemple, ne peut pas savoir si le jeu est déjà installé sans consulter le registre, puisque l'utilisateur peut avoir installé le jeu n'importe où sur le disque...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Médinoc a raison dans la mesure où Win32 fournit en général des fonctions pour récupérer les infos plutôt que de forcer le développeur à aller lire manuellement le registre. Lorsqu'elles existent, il faut les utiliser.

    Il y a tout de même certains avantages à ne pas utiliser le registre pour stocker des paramètres d'applications. Le plus important, je pense, est que les fichiers texte sont plus simples à manipuler pour un humain. Le registre offre une structure intéressante, mais enferme le développeur dans un format qu'il ne maîtrise pas. Pour une petite appli, je n'y vois pas d'inconvénient, mais pour un projet plus ambitieux, je choisirais un format texte simple (du XML léger, ou du moins quelque chose de lisible et structuré).

    Bon courage,

    Carl

  14. #14
    Membre régulier

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 44
    Points : 78
    Points
    78
    Par défaut
    Merci pour les réponses.
    Je suis aussi pour mettre les infos dans un tit fichier XML.
    Je retiens le coup du SHGetFolderPath (). J'étais sur qu'une fonction de ce style existait pour Windows.
    Dommage qu'il y ait pas une fonction du même style pour Unix...
    Je vais voir ce que je vais faire avec le /etc

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

Discussions similaires

  1. [Généralités] Sauvegarde des données saisies d'une application Windev dans un disque DVD
    Par zonoelson dans le forum WinDev
    Réponses: 6
    Dernier message: 14/01/2014, 06h54
  2. Réponses: 5
    Dernier message: 27/02/2012, 10h44
  3. [VB.NET] Comment sauvegarder des données ?
    Par Aspic dans le forum VB.NET
    Réponses: 14
    Dernier message: 15/07/2007, 15h47
  4. Sauvegarder des données de configuration
    Par Yepazix dans le forum Débuter
    Réponses: 7
    Dernier message: 10/04/2006, 13h35
  5. sauvegarde des données des tables
    Par tomm dans le forum Bases de données
    Réponses: 18
    Dernier message: 27/04/2004, 21h29

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