Sprawa prosta i łatwa, wystarczy wiedzieć, że zawsze pierwszy parametr programu to ścieżka do pliku exe, wystarczy więc wyciąć nazwe pliku i rozszerzenie:
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
// zwraca folder, w ktorym znajduje sie exek #include #include using namespace std ; string ExtractDirectory( string appName) { int i ; for (i = appName.size() - 1 ; i >= 0 ; i--) if (appName == '\') break ; return appName.substr(0 , i + 1) ; } string ExtractDirectory(const char *appName) { return ExtractDirectory(string(appName)) ; } int main(int argc , char *argv[]) { cout << ExtractDirectory(argv[0]) << endl ; cout << ExtractDirectory(string("c:\\cos tam cos tam\\lojeeeeeej\\cos\\cosiek.xml")) << endl ; return 0 ; } |
Jeżeli nasza aplikacja nie jest konsolowa tylko typu Win32, to jako pierwszy parametr nie dostaniemy ścieżki do exeka, musimy ją dostać w inny sposób, oto kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include #include (..) TCHAR fName[MAX_PATH] ; GetModuleFileName(NULL , fName , MAX_PATH) ; string path(ExtractDirectory(fName)) ; MessageBox(NULL , path.c_str() , "" , 0) ; |
Jak widać, korzystamy z funkcji WinAPI GetModuleFileName (dzięki za info Firen :>), która w drugim parametrze umieszcza ścieżkę do exeka, do którego należy aktualny proces.
Autor: Iskar