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 :

Comment lire un fichier dans appdata de n'importe quel utilisateur sur n'importe quel ordinateur.


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2017
    Messages
    8
    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 : 8
    Points : 6
    Points
    6
    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
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 684
    Points : 30 973
    Points
    30 973
    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 «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    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
    "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
    8
    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 : 8
    Points : 6
    Points
    6
    Par défaut
    D'accord merci à tous !

  5. #5
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 551
    Points
    1 551
    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.
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  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
    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, 17h54
  2. Comment lire une chaîne dans un fichier binaire?
    Par dot-_-net dans le forum Débuter
    Réponses: 9
    Dernier message: 18/05/2008, 23h13
  3. Réponses: 3
    Dernier message: 19/02/2007, 23h01
  4. Réponses: 2
    Dernier message: 22/09/2006, 08h33
  5. Réponses: 4
    Dernier message: 28/10/2005, 09h59

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