PDA

View Full Version : [C]avere nome eseguibile


andros94
24-04-2012, 17:30
ho un problema con un programma per win che sto scrivedo...ho necessita di avere il nome dell' eseguibile, ho bisogno di una funzione simile a GetModuleFileName () ma senza percorso completo solo il nome del programma
qualcuno puo aiutarmi ?? :)

clockover
24-04-2012, 20:31
int main(int argn, char ** argp){
printf("%s\n", argp[0]);
}

char ** argp contiene gli argomenti passati da linea di comando e il primo argomento, cioč l'elemento argp[0] č il nome dell'eseguibile

__ZERO_UNO__
24-04-2012, 22:04
Ho pensato che potevi usare __FILE__, che funziona anche con file di libreria, ma vuoi il nome del file compilato. :P

andros94
25-04-2012, 09:30
int main(int argn, char ** argp){
printf("%s\n", argp[0]);
}

char ** argp contiene gli argomenti passati da linea di comando e il primo argomento, cioč l'elemento argp[0] č il nome dell'eseguibile

con questo codice mi viene stampato il pecoso del eseguibile, non il nome :mad:

clockover
25-04-2012, 10:10
con questo codice mi viene stampato il pecoso del eseguibile, non il nome :mad:

si ma quel percorso non comprende anche il nome dell'eseguibile?

andros94
25-04-2012, 10:52
a me serve SOLO il nome dell' eseguibile, altrimenti avrei usato la funzione GetModuleFileName()

lorenzo001
25-04-2012, 13:02
a me serve SOLO il nome dell' eseguibile, altrimenti avrei usato la funzione GetModuleFileName()

Parti dalla stringa con il percorso e con qualche riga arrivi al nome


char *name = strrev(argv[0]);
*(strchr(name, '\\')) = 0;
strrev(name);

printf("%s\n", name);


In ogni caso, la GetModuleFileName lavora solo con Windows.

andros94
25-04-2012, 13:50
grazie per il codice...funziona, ma non ho capito cosa fa essattamente questa riga

*(strchr(name, '\\')) = 0;

lorenzo001
25-04-2012, 19:45
Cerca il primo carattere \ nella stringa e lo sostituisce con un NUL

clockover
25-04-2012, 20:10
Anche una cosa del genere altrimenti
char * tmp = argp[0] + (strlen(argp[0]) - 1);
while(*(tmp - 1) != '/')*tmp--;

sono su linux per questo ho utilizzato '/' per l'esempio

redatim
26-04-2012, 20:06
Puoi usare la funzione basename (presente in linux e mingw32) oppure la _split (presente solo su windows) http://msdn.microsoft.com/en-us/library/e737s6tf.aspx