bonjour,
je voudrai savoir comment je pourrai récupérer le chemin du répertoire dans le quelle se trouve mon application MFC.
merci
Version imprimable
bonjour,
je voudrai savoir comment je pourrai récupérer le chemin du répertoire dans le quelle se trouve mon application MFC.
merci
bon je vien de trouver la solution , et je la donne comem ::yaisse2:
a+Code:
1
2 LPTSTR lpdir = new TCHAR[256]; GetCurrentDirectory(256, lpdir);
Non, cela te donne le répertoire courant. Si depuis un shell dans la racine (c:\), tu tapes le noms de ton programme avec son chemin complet ("c:\program files\install\mon_programme.exe" par exemple), cela te donnera le nom du répertoire dans lequel tu te trouves (c:\) et pas celui dans lequel se trouve ton programme ("c:\program files\install\")
La seule solution sous Windows est d'utiliser GetModuleFileName ()
Il me semblait qu'on l'avait directement en MFC avec "theApp" non ?
msahli3: Pourquoi allouer ton buffer sur le tas?
Allouer sur la pile suffit:
Code:
1
2
3
4
5
6
7
8
9
10
11
12 /*Récupère le chemin de l'application*/ TCHAR dir[MAX_PATH]; GetModuleFileName(NULL, dir, MAX_PATH); /*Recherche le dernier séparateur de dossier (je ne suis même pas sûr qu'il soit utile de chercher le /, mais on ne sait jamais)*/ TCHAR *lastSlash = _tcsrchr(dir, _T('/'); TCHAR *lastBackSlash = _tcsrchr(dir, _T('\\'); TCHAR *lastSep = (lastSlash > lastBackSlash ? lastSlash : lastBackSlash); /*Tronque la chaîne à cet endroit*/ *lastSep = _T('\0');
Code:
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
26 CString GetModuleDirectory() { TCHAR lpFilename[MAX_PATH]; DWORD dwSize = MAX_PATH; CString strInstallModulePath; if( !::GetModuleFileName(::AfxGetInstanceHandle(), lpFilename, MAX_PATH ) ) { CString strMsg; strMsg.Format("GetModuleFileName failed (%d)\n", ::GetLastError()); AfxMessageBox(strMsg, MB_ICONSTOP); return CString(); } strInstallModulePath = lpFilename; if(strInstallModulePath.IsEmpty()) return CString(); int index = strInstallModulePath.ReverseFind('\\'); if(index == -1) return CString(); return strInstallModulePath.Left(index); // get directory without back slash }