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++Builder Discussion :

Connaitre le chemin du dossier Application Data


Sujet :

C++Builder

  1. #1
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut Connaitre le chemin du dossier Application Data
    Bonjour,

    Je cherche à trouver une méthode pour récupérer le chemin du répertoire Application Data.
    J'ai cherché sur le forum, sur google et dans l'aide de BCB et de la JVCL (3.33) mais je n'ai rien trouvé qui fonctionne correctement.

    Je suis preneur pour toute solution

    Nb: il faudrait que le code soit compatible pour toutes les versions de Windows de 2000 à Seven.

    Cordialement et bon week-end,
    Bakaneko.

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Peut etre en utilisant ça

  3. #3
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Sinon, est-ce que tu essayé avec comme nom de chemin: %appdata%

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    Salut

    Vrai probleme , fausse question ???

    Ne s agit il pas simplement de recuperer le "user" ??


    +++

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    Comme l'indique Sat83 il faut utiliser SHGetSpecialFolderLocation avec le CSIDL: CSIDL_APPDATA
    Cependant l'exemple de la FAQ ne libère pas le PIDL obtenu, et ne pas libérer un PIDL est source d'ennuis avec Windows .
    Pour libèrer un PIDL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void FreePIDL(LPITEMIDLIST pIdl)
    {
      LPMALLOC lpMalloc;
      if (SUCCEEDED(SHGetMalloc(&lpMalloc)))) {
        lpMalloc->Free(pIdl);
        lpMalloc->Release();
      }
    }
    Une autre technique de libération existe avec CoTaskMemFree. Elle est équivalente mais je ne la connais pas bien donc je ne peux la décrire plus.

    Aussi il faut savoir que depuis Vista Microsoft conseille de passer plutot par SHGetKnownFolderPath. Les CSIDL deviennent des KNOWNFOLDERID.
    J'utilise la 1ère technique depuis W95 sur toutes les plateformes. Il est juste bon de le savoir pour plus tard.

    Yarp

  6. #6
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    J'ai mélangé le code trouvé par sat83 (m'apprendra à mal chercher) et celui de yarp pour faire le code que je désirais.
    J'obtiens donc:
    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
    19
    20
    21
    22
    23
    24
    25
     
    AnsiString GetAppDataPath()
    {
     String Result = "";
     char sPath[MAX_PATH];
     ITEMIDLIST *AIdList;
     try
     {
      SHGetSpecialFolderLocation(NULL,CSIDL_APPDATA,&AIdList);
      SHGetPathFromIDList(AIdList, sPath);
      Result = sPath;
     
      LPMALLOC lpMalloc;
      if (SUCCEEDED(SHGetMalloc(&lpMalloc)))
      {
        lpMalloc->Free(AIdList);
        lpMalloc->Release();
      }
     }
     catch(...)
     {
      Result = "";
     }
     return Result;
    }
    Pour l'instant (et j'espère que cela va durer), cela fonctionne.
    Merci pour vos indications.

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Il y a aussi la fonction SHGetSpecialFolderPath qui évite de devoir libérer la mémoire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        char sPath[MAX_PATH];
        bool success=SHGetSpecialFolderPath(NULL,sPath,CSIDL_APPDATA,false);

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/01/2015, 18h19
  2. [Débutant] obtenir le chemin du repertoire application data
    Par hi-wave dans le forum VB.NET
    Réponses: 7
    Dernier message: 12/11/2011, 13h33
  3. Réponses: 3
    Dernier message: 12/06/2009, 10h34
  4. Réponses: 5
    Dernier message: 07/08/2008, 15h36
  5. Réponses: 2
    Dernier message: 11/03/2007, 18h51

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