1

j'ai un (petit)° pb de changement de repertoire... je m'explique.

Je suis en train de faire un prgm dans lequel on peut ouvrir des fichiers. Le pb c'est que dans ce cas la le repertoire courant du prgm change, et si je veux acceder a des fichiers se trouvant dans le rep d'origine, je peux plus... a moins de faire le bourin et d'indiquer a mon prgm tout le path (ie "c:\.......\mon fichier") Le pb avec cette solution, c'est que mon prgm ne marche plus si on le change de repertoire... Bon je vrois que c'est pas tres claire la... en gros, on demande à l'utilisateur de choisir un fichier (une map d'un jeux par exemple) et si on change de reptoire courant, apres mon prgm ne peut plus retrouver les textures qui elles sont dans le reprotire du prgm...

D'ou ma question : existe-t-il une fnc permetant de connaitre le repertoire d'execution du prgm ?

Ancien pseudo : lolo

2

#int main(int argc, char* argv[])
#{
# return 0;
#}

Le paramètre argv te permet de connaitre le chemin du programme.

Par exemple si t'as un programme qui est sur le bureau et qui s'appelle "prgm" tu aura :

*argv = "c:\windows\bureau\prgm.exe"

Rmq : argv est un pointeur de pointeur d'ou l'utilisation de l'opérateur * .

3

Attention: Cela ne marchera que sous Windows! Sous *nix, récupérer le répertoire dans lequel se trouve le programme est plus difficile. Pour récupérer le répertoire d'un programme de manière portable, il faut:
1. Vérifier si argv[0] contient PATH_SEPARATOR.
A. Si oui:
A.2. Vérifier si argv[0] commence par / ou par une lettre suivie de [i]:[/i]
A.a. Si oui, on a un chemin absolu, et on peut passer directement à l'étape A.3.
A.b. Sinon, on a un chemin relatif, on doit donc mettre le répertoire courant devant pour avoir un chemin absolu avec lequel passer à l'étape A.3.
A.3. Retirer tous les caractères à droite jusqu'à avoir PATH_SEPARATOR pour se débarasser du nom du programme.
B. Sinon, aucun répertoire n'est précisé.
B.2. On cherche donc répertoire par répertoire dans le PATH jusqu'à avoir trouvé le programme.
B.3. On garde le nom du répertoire dans lequel le programme a été trouvé.
B.4. On vérifie si ce nom de répertoire commence par / ou par une lettre suivie de [i]:[/i]
B.a. Si oui, on a un chemin absolu, et on a fini.
B.b. Sinon, on a un chemin relatif (oui, le PATH peut contenir des entrées comme ., surtout sous *nix!), on doit donc mettre le répertoire courant devant pour avoir un chemin absolu.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

heu.. et si j'utilise Visual C++ et que c'est un prgm SDI (interface graphique quoi....) et donc qu'il n'y a pa de fnc main ? komment je fais ?
Ancien pseudo : lolo

5

Lorsque tu ouvre ton fichier, tu utilises OPENFILENAME ?

6

totu a fait
Ancien pseudo : lolo

7

et tu ne peux pas extraire la partir du chemain dans FileName ?

8

avant de changer de repertoire, tu fais un opendir sur le repertoire courant ("./"), tu sauvegarde le DIR *dir_fd que la fct te renvoie, tu fais ton chdir pour aller chercher ta map, et qd t'as finis, tu fais un fchdir(dir_fd) pour revenir dans le rep ou t'etais...
ca marche pas ca sous windows?
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

9

Methode bourin:
	LPTSTR lpdir = new TCHAR[256]; 
	
	GetCurrentDirectory(256, lpdir);
	strcat( lpdir, "\OutPut.html");
	m_CHTML.Navigate(lpdir, NULL, NULL, NULL, NULL);

10

>GetCurrentDirectory(256, lpdir);
C'est n'importe quoi. Il veut justement le répertoire où se trouve le programme, pas le répertoire courant!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

ha dsl j'etait hssmile

12

Merci c bon, j'ai reussi à me debrouiller avec tout ca et ca marche impec maintenant !

Encore une fois : VIVE CE FORUM
Ancien pseudo : lolo