Bonjour � tous
Je voudrais savoir comment retrouver le chemin de l'application, � l'instar du "App.Path" de VB.Net
Quelqu'un sait-il comment faire ?
Merci de votre r�ponse
Bonjour � tous
Je voudrais savoir comment retrouver le chemin de l'application, � l'instar du "App.Path" de VB.Net
Quelqu'un sait-il comment faire ?
Merci de votre r�ponse
Salut,
tu l'as dans le premier index de argv dans le main, apr�s tu as des techniques sp�cifiques selon la plateforme comme GetCommandLine dans processenv.h sous Windows.
Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation r�seau ?
Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.
Merci � Bousk
Je suis d�butant en C++ et malheureusement je ne comprend rien � tes explications, ni � celles donn�es dans le lien que tu m'as mis.
Je cherche un truc du genre : chemin = "Le code ad�quat"
Si tu peux m'en dire plus, n�h�sites surtout pas
PS. Je travaille avec VS2017 sous Windows 7
Il n'y a rien qui soit � la fois standard et fiable (notamment, argv[0] peut contenir un alias au lieu du vrai chemin de l'application).
R�sultat, il faut utiliser les moyens non-standard de ta plate-forme.
Sous Windows, on utilise la fonction GetModuleFileName().
Voici un exemple en C:
Code C : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 #include <windows.h> #include <stdio.h> #include <tchar.h> int _tmain(int argc, _TCHAR* argv[]) { TCHAR exeFilePath[MAX_PATH] = _T(""); GetModuleFileName(NULL, exeFilePath, MAX_PATH); _tprintf(_T("EXE file name: %s"), exeFilePath); return 0; }
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
J'ai essay� le code suivant
J'ai 2 erreurs :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 // ConsoleApplication1.cpp*: définit le point d'entrée pour l'application console. // #include <windows.h> #include <stdio.h> #include <tchar.h> #include "stdafx.h" int main(int argc, _TCHAR* argv[]) { TCHAR exeFilePath[MAX_PATH] = _T(""); GetModuleFileName(NULL, exeFilePath, MAX_PATH); _tprintf(_T("EXE file name: %s"), exeFilePath); return 0; }
Erreur C2065 'MAX_PATH'*: identificateur non d�clar�
Erreur C3861 'GetModuleFileName'*: identificateur introuvable
Il manque quelque chose
D'autre part c'est une application Windows console, est-ce que "_tprintf" � la place de "cout" fonctionnera ?
Merci de ton aide
#include "stdafx.h"
C'EST TOUJOURS EN PREMIER !!!
Merci beaucoup
Pour #include "stdafx", je n'en avais aucune id�e
En tous les cas �a fonctionne parfaitement
Explication: Quand un "precompiled header" est utilis�, tout ce qui pr�c�de le #include correspondant est "saut�" par le compilateur et remplac� par le contenu du fichier d'en-t�te pr�compil�.
R�sultat, les trois inclusions que je t'ai donn�es, le compilo ne les voit plus. Mais tu peux les d�placer vers stdafx.h, il est fait pour �a.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je te remercie de tes explications.
A 84 ans, j'ai encore appris quelque chose aujourd�hui et j'en suis bien content
C'est encore moi
Je suis d�sol�, mais pourrais-tu me dire comment r�cup�rer exeFilePath en string pour l'utiliser comme variable
Merci d'avance
En passant "exeFilePath" comme param�tre du constructeur de la std::string, non ?
excuse moi, mais � mon petit niveau de connaissance, je crois avoir compris que je devais d�clarer "exeFilePath" comme un string, mais il est d�j� en TCHAR
Je suis d�sol� de mon incomp�tence actuelle.
Le probl�me, c'est qu'une std::string n'est pas en Unicode: Sous un Windows occidental, elle sera encod�e en Windows-1252, qui ne supporte pas les caract�res non-latins.
Pour bien faire, il te faudrait utiliser un typedef de ce genre, et n'utiliser que le type en question:
Code : S�lectionner tout - Visualiser dans une fen�tre � part typedef std::basic_string<TCHAR> tstring;
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Il devrait exister une fonction GetModuleFileNameA pour forcer l'ANSI.
Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation r�seau ?
Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.
Et elle aussi perdra tout caract�re non-latin.
H�las, Windows ne peut pas faire marcher ses fonctions "A" en UTF-8.![]()
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Bonjour � tous
Malgr� mon manque de connaissances en C++, je ne suis pas peu fier d'avoir trouv� (tout seul) un d�but de solution � mon probl�me.
J'ai essay� d'extraire les "char" de exeFilePath, et �a marche !!!!
Voici le code qui y correspond.
Et j'obtiens le chemin "Y:\\Visual Studio 2017\\Projets\\C++\\ConsoleApplication1\\Debug\\ConsoleApplication1.exe"
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 int main() { TCHAR exeFilePath[MAX_PATH] = _T(""); GetModuleFileName(NULL, exeFilePath, MAX_PATH); _tprintf(_T("EXE file name: %s"), exeFilePath); cout << endl; char lettre; string chemin; try { for(int i(0); i<200; i++) { chemin += (char)exeFilePath[i]; } } catch (int e) { cout << "FIN" << endl; } system("PAUSE"); return 0; }
Il me restera � d�doubler les "\\" probablement avec une instruction qui correspondrait � "chaine.replace" qui existe en VB.Net
En tous les cas merci de votre aide
Cette "conversion" est extr�mement maladroite et perd non seulement les caract�res non-latins, mais aussi les caract�res que l'encodage Windows-1252 place dans le bloc C1 (comme le symbole Euro, le � ou le �).
On peut. Notamment, on peut faire d�clarer exeFilePath comme un tableau de wchar_t et appeler explicitement GetModuleFileNameW().
Je tends � pr�f�rer la solution TCHAR par contre, afin d'�viter de me fermer � de possibles �volutions futures du SDK.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Votre code est assez in�l�gant et est extr�mement dangereux car il ne fonctionnera qu'avec la constante de compilation "UNICODE" non d�fini.
Cela rend l'usage de TCHAR compl�tement inutile.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 typedef std::basic_string<TCHAR> tstring; int main() { TCHAR exeFilePath[MAX_PATH] = _T(""); GetModuleFileName(NULL, exeFilePath, MAX_PATH); _tprintf(_T("EXE file name: %s"), exeFilePath); std::cout << endl; tstring chemin{exeFilePath}; std::cout << chemin <<std::endl return 0; }
Cela n'est pas un probl�me pour moi car je n'aurais que des caract�res ascii dans un chemin de fichier et de toute fa�on ce ne sont que des programmes destin�s � apprendre le C++.
Je n'ai pas encore trouv� le code permettant de supprimer un '\' sur deux en C++, si vous avez une id�e, je suis preneur
Partager