Variables d'environnement Windows en C

Variables d'environnement Windows en C - C - Programmation

Marsh Posté le 02-05-2006 à 12:53:27    

Bonjour,
 
Je voudrais savoir s'il était possible d'utiliser les variables d'environnement de Windows pour l'ouverture d'un fichier en langage C.
En gros j'aimerais pouvoir faire ça:
 

Code :
  1. fopen("C:\Documents and Settings\%USERNAME%\config_%COMPUTERNAME%.txt","r" )


 
Merci d'avance :)
 

Reply

Marsh Posté le 02-05-2006 à 12:53:27   

Reply

Marsh Posté le 02-05-2006 à 13:08:48    

lynxia a écrit :

Je voudrais savoir s'il était possible d'utiliser les variables d'environnement de Windows pour l'ouverture d'un fichier en langage C. En gros j'aimerais pouvoir faire ça:

Code :
  1. fopen("C:\Documents and Settings\%USERNAME%\config_%COMPUTERNAME%.txt","r" )




Oui, mais pas directement :

  • getenv()
  • sprintf() ([C99] ou snprintf())

Prévoir la place nécessaire...


Message édité par Emmanuel Delahaye le 02-05-2006 à 13:09:24

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 02-05-2006 à 13:58:47    

Merci.
 
Ca marchera aussi sous Windows?

Reply

Marsh Posté le 02-05-2006 à 14:01:21    

oui

Reply

Marsh Posté le 02-05-2006 à 15:11:36    

Si j'ai bien compris ce que voulait dire Emmanuel Delahaye, je vais devoir dans un premier temps afficher les variables d'environnement (dans mon cas, USERNAME et COMPUTERNAME) grâce à la fonction getenv(), ensuite je devrais les convertir grâce à la fonction sprintf() ?
 
J'ai cherché des informations concernant la fonction getenv() et j'ai trouvé ceci:  
 
char *getenv(const char *name)
 
name correspond à quoi exactement? je ne suis pas sûre d'avoir bien compris comment utiliser la fonction getenv()...

Reply

Marsh Posté le 02-05-2006 à 15:12:57    

au nom de la variable d'environnement ?
http://www.cplusplus.com/ref/cstdlib/getenv.html

Reply

Marsh Posté le 02-05-2006 à 15:15:05    

lynxia a écrit :

char *getenv(const char *name)
 
name correspond à quoi exactement? je ne suis pas sûre d'avoir bien compris comment utiliser la fonction getenv()...


http://dpobel.free.fr/man/html/aff [...] an/getenv/


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 02-05-2006 à 16:31:34    

Merci :)
 
Une fois que j'ai obtenu le chemin stocké dans un tableau à l'aide de sprintf, quelle est la syntaxe pour l'indiquer à fopen?

Message cité 1 fois
Message édité par lynxia le 02-05-2006 à 16:32:18
Reply

Marsh Posté le 02-05-2006 à 16:39:53    

lynxia a écrit :

Une fois que j'ai obtenu le chemin stocké dans un tableau à l'aide de sprintf, quelle est la syntaxe pour l'indiquer à fopen?


Bah, tu passes le nom de la chaine à fopen()...

Code :
  1. {
  2.    char s[BIG];
  3.    ... getenv(...);
  4.    ... getenv(...);
  5.    sprintf(s, ...);
  6.    fopen (s, ...);
  7. }


Ca ne me parait pas être un scoop... Si tu as un problème, poste ton code...


Message édité par Emmanuel Delahaye le 02-05-2006 à 16:41:09

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 02-05-2006 à 16:44:09    

Oui effectivement ça en était pas un, désolée pour la question :)
 
Ca marche, merci pour tout :)

Reply

Marsh Posté le 02-05-2006 à 16:44:09   

Reply

Marsh Posté le 02-05-2006 à 17:00:58    

Non en fait j'ai parlé trop vite...
Je pense qu'il y a un souci au niveau du sprintf()...?
 

Code :
  1. char * toto;
  2. char * titi;
  3. char chemin [500];
  4. FILE *fichier;
  5. toto = getenv ("COMPUTERNAME" );
  6. titi = getenv ("USERNAME" );
  7. sprintf (chemin, "C:\Documents and Settings\%s\config_%s.txt",toto,titi);  
  8. fichier = fopen(chemin,"r" );

Message cité 1 fois
Message édité par lynxia le 02-05-2006 à 17:02:08
Reply

Marsh Posté le 02-05-2006 à 17:05:47    

lynxia a écrit :


Code :
  1. toto = getenv ("COMPUTERNAME" );
  2. titi = getenv ("USERNAME" );
  3. sprintf (chemin, "C:\Documents and Settings\%s\config_%s.txt",toto,titi);



'\' se code '\\' en C..

Code :
  1. sprintf (chemin, "C:\\Documents and Settings\\%s\\config_%s.txt",toto,titi);


D'autre part, setenv() peut échouer (retourne NULL). Tu devrais le tester, et peut être proposer des valeurs par défaut, ou un message d'alerte...
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 02-05-2006 à 19:10:40    

Y a une fonction windows pour ca: http://msdn.microsoft.com/library/ [...] trings.asp

Reply

Marsh Posté le 02-05-2006 à 20:18:44    

Merci pour vos réponses.
 
Pour le moment, ça fonctionne comme je veux.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed