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

MFC Discussion :

.ini dans le meme répertoire que l'appli..


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut .ini dans le meme répertoire que l'appli..
    Bonjour,

    Voilà, j'ai regardé comment créer et utiliser les fichiers .ini avec les MFC, j'arrive bien avec la façon "standard" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AfxGetApp()->WriteProfileString(...);
    AfxGetApp()->GetProfileString(...);
    mais ca écrit le .ini dans c:\Windows...

    J'aimerais utiliser un fichier .ini dans le même répertoire que mon appli, en cherchant, j'ai trouvé les fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AfxGetApp()->WritePrivateProfileString(...)
    AfxGetApp()->GetPrivateProfileString(...)
    mais ca ne fonctionne pas, lors de la compilation, j'ai une erreur C2039 : 'WritePrivateProfileStringA' : is not member of CWinApp...

    Comment faire ? Quelqu'un sait un peu plus comment ca fonctionne avec ces fameux fichiers .ini pour écrire dans le même répertoire que l'appli ?

    Merci
    Bonne soirée
    ++

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    voir la faq : http://cpp.developpez.com/faq/vc/?pa...ngeDefaultName
    quand aux erreurs ,utilise les méthodes de la classe CWinApp....
    c'est WriteProfileString et non WritePrivateProfileString

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut
    Si tu veux écrire le .ini dans le même répertoire que ton appli, il faut que tu récupères le nom complet de l'appli (avec le chemin).
    Pour ce faire tu peux utiliser la fonction GetModuleFileName :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Lecture du nom complet de l'appli
    char IniFileName[MAX_PATH];
    GetModuleFileName(NULL, IniFileName, MAX_PATH);
     
    // Nom du fichier .ini
    strcpy(&IniFileName[strlen(IniFileName)-3],"ini");
    Je dis pas que c'est la méthode la plus élégante mais ça fonctionne.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Mais déjà, de nos jours, tu n'est même plus censé utiliser des ini. La méthode recommandée, c'est le Registre: HKLM ou HKCU selon que le paramètre doit être réservé aux admins ou non...
    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.

  5. #5
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut,

    il faut commencer par initialiser la variable CWinApp::m_pszProfileName, en y mettant le chemin complet où doit etre stocké ton fichier .ini

    après tu peux utiliser les fonctions CWinApp::GetProfileInt() et CWinApp::WriteProfileInt() ... entre autres

    voici un peu de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    CString AppPath;
    int len=0;
    if (GetModuleFileName(AfxGetInstanceHandle(),AppPath.GetBufferSetLength(MAX_PATH),MAX_PATH))
    {
      int i=AppPath.ReverseFind(_T('\\'));
      if (i>=0)
        len=i+1;
    }
     
    AppPath.ReleaseBuffer(len);
     
    LPCTSTR pProfileName=_tcsdup(AppPath+_T("MONFICHIER.INI"));
    if (pProfileName==NULL)
      AfxThrowMemoryException();
     
    free((void*)m_pszProfileName);
    m_pszProfileName=pProfileName;
    @+

  6. #6
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    Mais déjà, de nos jours, tu n'est même plus censé utiliser des ini. La méthode recommandée, c'est le Registre: HKLM ou HKCU selon que le paramètre doit être réservé aux admins ou non...
    oui et non. supposons que tu fasses une appli pour un usage "nomade". c'est à dire que l'appli est stockée sur clé USB, pour pouvoir etre libre de l'utiliser sur n'importe quel PC.

    si tu mets la config dans la base de registres Windows, lorsque tu changes de PC tu perds tout ...

    la seule solution, est le fichier de configuration (ini par exemple)

    et les MFC permet de choisir l'une ou l'autre, juste en réglant soit la variable m_pszProfileName soit la variable m_pszRegistryKey

    Enfin ceci est valable pour les MFC avant le feature pack de VS2008, puisque depuis il y a l'objet CSettingsStore qui bride tout à la base de registre, à moins de développer sa propre classe dérivée de CSettingsStore

    ça m'interesserait, si certains ont d'autres solutions que de réécrire une classe CSettingsStore ... ?

    @+

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par stephdim Voir le message
    oui et non. supposons que tu fasses une appli pour un usage "nomade". c'est à dire que l'appli est stockée sur clé USB, pour pouvoir etre libre de l'utiliser sur n'importe quel PC.

    si tu mets la config dans la base de registres Windows, lorsque tu changes de PC tu perds tout ...

    la seule solution, est le fichier de configuration (ini par exemple)

    et les MFC permet de choisir l'une ou l'autre, juste en réglant soit la variable m_pszProfileName soit la variable m_pszRegistryKey

    Enfin ceci est valable pour les MFC avant le feature pack de VS2008, puisque depuis il y a l'objet CSettingsStore qui bride tout à la base de registre, à moins de développer sa propre classe dérivée de CSettingsStore

    ça m'interesserait, si certains ont d'autres solutions que de réécrire une classe CSettingsStore ... ?

    @+
    salut,
    j'utilise cette classe pour mes .ini...
    http://cpp.developpez.com/faq/vc/?pa...ile#EVCIniFile

  8. #8
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    intéressant ! je vais étudier ça ...
    Merci farscape

    @+

Discussions similaires

  1. Afficher les valeurs d'un état dans le meme odre que la requete
    Par langevert dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/09/2007, 10h45
  2. [CR X]dans le même sens que les sous totaux
    Par abdoing dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 10/08/2007, 13h20
  3. Afficher le resultat dans la meme page que le formulaire
    Par info_plus dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/07/2007, 10h17
  4. Resultat dans la meme page que le formulaire
    Par ChrisMan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/05/2007, 14h42
  5. Réponses: 5
    Dernier message: 30/04/2007, 18h03

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