2010-01-22 7 views
1

J'ai besoin d'une chaîne de valeur de variable d'environnement %TEMP% dans la plate-forme Windows.TEMP Expansion de variables d'environnement pour C++ (Windows)

Si j'essaie d'utiliser des méthodes (C/C++) (getenv(), ...) pour obtenir cette variable d'environnement, elle retourne “~” dans cette chaîne.

Par exemple: C: \ DOCUME ~ 1 \ pkp \ LOCALS ~ 1 \ Temp.

Mais je dois obtenir la chaîne complète pour certaines raisons, comme ci-dessous:

C: \ Documents and Settings \ PKP \ Local Settings \ Temp

Si quelqu'un connaît une méthode pour obtenir cela, s'il vous plaît laissez moi sais.

+0

Notez que les noms avec ~ sont "8.3 noms". Beaucoup, sinon tous les fichiers sur un système Windows ont deux noms, un "long" nom et un "8.3" nom. C'est un concept spécifique à Windows. Le ~ fait vraiment partie du nom et ne peut pas être étendu. – MSalters

+0

Merci MStalers – anand

+0

Quelle raison avez-vous de croire que * n'est pas * la valeur de la variable d'environnement? Que voyez-vous lorsque vous exécutez 'echo% TEMP%'? –

Répondre

3

Appelez GetLongPathName() sur le nom abrégé.

+0

Pourriez-vous suggérer quelque chose en C++ pur, c'est-à-dire sans utiliser l'API standard WINDOWS? – anand

+0

Quelle demande bizarre! –

+0

Mais pourquoi trouvez-vous cela bizarre. Existe-t-il une fonction STL équivalente pour wordexp() http://www.opengroup.org/onlinepubs/009695399/functions/wordexp.html – anand

1

DOCUME ~ 1 n'est pas une variable d'environnement. C'est une convention d'appellation héritée de DOS toujours supportée par Windows pour la compatibilité ascendante. Par conséquent, il n'y a rien à «développer» dans le sens variable de l'environnement.

1

Vous pouvez utiliser GetTempPath cela vous oblige à inclure "windows.h" mais je suppose que vous savez comment faire cela depuis que vous écrivez une application Windows.

+0

Pourriez-vous suggérer quelque chose en C++ pur, c'est-à-dire sans utiliser l'API standard WINDOWS – anand

+0

@anand - je ne suis pas sûr que ce soit possible, sauf la façon dont vous l'avez fait avec getenv – Serge