1. #1
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 6
    Points : 5
    Points
    5

    Par défaut Comment lire un fichier dans appdata de n'importe quel utilisateur sur n'importe quel ordinateur.

    Bonjour,
    J'aimerais faire un programme qui lit dans appdata sauf que je n'ai pas réussi avec C:\\Users\\%USERNAME%\\AppData\\... alors comment fait on ?
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 927
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 5 927
    Points : 16 384
    Points
    16 384
    Billets dans le blog
    1

    Par défaut

    Bonjour
    Quelle que soit la fonction que tu as utilisé pour ouvrir ce dossier, celui qui a créé cette fonction n'avait absolument aucune raison pour s'imaginer que "%USERNAME%" devait être vue comme une variable d'environnement et qu'elle devait alors être remplacée par la chaine correspondante.
    Pour récupérer ton environnement, tu peux soit utiliser le 3° paramètre de main() (conventionnellement déclaré comme char **envp ou char *envp[]) ; soit utiliser getenv(). Pour envp c'est pas trop pratique parce que les chaines sont écrites sous la forme "variable=valeur" donc si tu veux récupérer une variable particulière, faut parser le bouzin, se caler sur le '=' etc. Donc getenv("USERNAME") devrait le faire.

    PS: ne fout pas bêtement getenv("USERNAME") directement dans la fonction. Il te faut
    1) créer la chaine contenant le chemin, chaine qui contiendra le début + le retour de getenv() + la fin => sprintf ou strcat
    2) appeler ta fonction avec cette chaine ainsi créée...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    26 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 26 562
    Points : 38 544
    Points
    38 544

    Par défaut

    "N'importe quel utilisateur sur n'importe quel ordinateur" est impossible (notamment à cause des profils itinérants).

    Par contre, l'utilisateur courant sur le poste courant, c'est très facile, getenv("APPDATA") te donnant le chemin du répertoire en question (pour l'avoir en Unicode, il faudra utiliser SHGetKnownFolderPath).
    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.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 6
    Points : 5
    Points
    5

    Par défaut

    D'accord merci à tous !

  5. #5
    Membre confirmé Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2011
    Messages : 308
    Points : 609
    Points
    609

    Par défaut

    Hello

    Citation Envoyé par Fire phoenix Voir le message
    Bonjour,
    J'aimerais faire un programme qui lit dans appdata sauf que je n'ai pas réussi avec C:\\Users\\%USERNAME%\\AppData\\...
    En complément à Médinoc, il y a également la fonction ExpandEnvironmentStrings() qui peut te donner un coup de pouce.
    Quel que soit l'objet, il sera trouvé dans le dernier endroit dans lequel on l'aura cherché (loi de Boob).
    Se tromper est humain, mais pour vraiment mettre le bordel, il faut y ajouter un ordinateur (cinquième loi de Young)

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    26 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 26 562
    Points : 38 544
    Points
    38 544

    Par défaut

    Citation Envoyé par edgarjacobs Voir le message
    En complément à Médinoc, il y a également la fonction ExpandEnvironmentStrings() qui peut te donner un coup de pouce.
    Quitte à utiliser les fonctions Microsoft, autant supprimer les intermédiaires (comme les variables d'environnement) et utiliser directement SHGetKnownFolderPath().
    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.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/03/2014, 18h54
  2. Comment lire une chaîne dans un fichier binaire?
    Par dot-_-net dans le forum Débuter
    Réponses: 9
    Dernier message: 19/05/2008, 00h13
  3. Réponses: 3
    Dernier message: 20/02/2007, 00h01
  4. Réponses: 2
    Dernier message: 22/09/2006, 09h33
  5. Réponses: 4
    Dernier message: 28/10/2005, 10h59

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