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.
Version imprimable
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.
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...
"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).
D'accord merci à tous !
Hello
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().