Comme ci-dessus, comment puis-je obtenir le dossier AppData dans Windows en utilisant C?Comment obtenir le dossier% AppData% en C?
Je sais que pour C# vous utilisez Environment.SpecialFolder.ApplicationData
Comme ci-dessus, comment puis-je obtenir le dossier AppData dans Windows en utilisant C?Comment obtenir le dossier% AppData% en C?
Je sais que pour C# vous utilisez Environment.SpecialFolder.ApplicationData
Utilisez SHGetSpecialFolderPath avec un CSIDL défini dans le dossier souhaité (probablement CSIDL_APPDATA ou CSIDL_LOCAL_APPDATA). Vous pouvez également utiliser les fonctions SHGetFolderPath() et SHGetKnownFolderPath() plus récentes. Il y a aussi SHGetKnownFolderIDList() et si vous aimez COM il y a IKnownFolder::GetPath().
Si je me souviens bien, il devrait juste être
#include <stdlib.h>
getenv("APPDATA");
Edit: Il suffit de double contrôle, fonctionne très bien!
Utilisez plutôt l'API appropriée, car les variables d'environnement sous Windows sont plus une courtoisie qu'un contrat. Ils pourraient ne pas être présents dans toutes les circonstances. Cependant, 'SHGetKnownFolderPath' * vous donnera le chemin à chaque fois. – Joey
Mais SHGetKnownFolderPath n'est peut-être pas disponible. Biscuits durs. –
@Hans: SHGetSpecialFolderPath devrait être, cependant. En fonction du système d'exploitation cible. – Joey
Vous pouvez utiliser these functions:
#include <stdlib.h>
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
comme ceci:
#include <stdio.h>
char *appData = getenv("AppData");
printf("%s\n", appData);
Utilisez plutôt l'API appropriée, car les variables d'environnement sous Windows sont plus une courtoisie qu'un contrat. Ils pourraient ne pas être présents dans toutes les circonstances. Cependant, 'SHGetKnownFolderPath' * vous donnera le chemin à chaque fois. – Joey
Il est utile de pouvoir remplacer les variables d'environnement par processus. Pourquoi dites-vous qu'ils sont "plus une courtoisie qu'un contrat"?Existe-t-il une documentation officielle ou quasi-officielle à cet effet? –
En utilisant la variable d'environnement %APPDATA%
ne fonctionnera probablement la plupart du temps. Toutefois, si vous voulez le faire de la manière officielle de Windows, vous devez utiliser le SHGetFolderPath
function, en passant la valeur CSIDL CSIDL_APPDATA
ou CSIDL_LOCAL_APPDATA
, en fonction de vos besoins.
C'est ce que la méthode Environment.GetFolderPath()
utilise dans .NET.
EDIT: Joey indique correctement que cela a été remplacé par SHGetKnownFolderPath dans Windows Vista. Nouvelles à moi :-).
Exemple de code:
TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL,
CSIDL_APPDATA | CSIDL_FLAG_CREATE,
NULL,
0,
szPath)))
{
PathAppend(szPath, TEXT("MySettings.xml"));
HANDLE hFile = CreateFile(szPath, ...);
}
CSIDL_APPDATA = nom d'utilisateur \ Application Data. Dans la fenêtre 10 est: nom d'utilisateur \ AppData \ Roaming
CSIDL_FLAG_CREATE = combiner avec une valeur CSIDL_ pour forcer la création de dossier dans SHGetFolderPath()
Vous pouvez également utiliser:
CSIDL_LOCAL_APPDATA = nom d'utilisateur \ Local Settings \ Application Data (non itinérant)
Notez que cette fonction a déjà été remplacée deux fois. Vous pourriez aussi bien donner les deux autres (y compris la fonction actuelle et recommandée). – Joey
@Joey - Je n'avais pas réalisé cela. Merci. – Ferruccio