Gå til innhold

[Løst]finne eget exe-navn


Anbefalte innlegg

prøver og få till noe sånt som "Test Server" laster en config fra "TestServ.Config.lua" (eller noe sånt) og vanerlig server laster fra configs.lua

 

så...

if(MyExeName("Test Server.exe"){
configpath += "/.otserv/TestServ.config.lua";
} else{
configpath += "/.otserv/config.lua";
}

 

noen som har en ide om hvordan jeg kan gjøre dette? :)

Endret av Hans_Henrik
Lenke til kommentar
Videoannonse
Annonse
LØST!

 

Sikker?

 

#include <iostream.h>

if(strcmp("Test Server",argv[0]) != 0){
configpath += "/.otserv/TestServ.config.lua";
} else{
configpath += "/.otserv/config.lua";
}

 

#include <iostream>

int
main( int argc, char *argv[] ) 
{
std::cout << "argv[0] == " << argv[0] << "\n";

}

 

... gir da:

 

$ ./a.out

argv[0] == ./a.out

$ /tmp/a.out

argv[0] == /tmp/a.out

 

(ekstra bonus for symlinker). Du har kanskje lyst å basere deg på noe annet?

Lenke til kommentar

Tror dette skal gjøre susen:

 

int main (int argc, char* argv[])
{
int lastslash;
char* exename = argv[0];
for (; *exename; exename++ )
	if ( *exename == '\\' || *exename == '/' )
		lastslash = exename - argv[0];
exename = argv[0] + lastslash + 1;
// ...
}

 

exename peker nå til navnet på .EXE-fila. Innspill / forslag til forbedring mottas med takk. :)

Endret av Rescudo
Lenke til kommentar
Tror dette skal gjøre susen:

 

int main (int argc, char* argv[])
{
int lastslash;
char* exename = argv[0];
for (; *exename; exename++ )
	if ( *exename == '\\' || *exename == '/' )
		lastslash = exename - argv[0];
exename = argv[0] + lastslash + 1;
// ...
}

 

exename peker nå til navnet på .EXE-fila. Innspill / forslag til forbedring mottas med takk. :)

 

Husk å initialisere lastslash. Man kan her event bruke funksjonen strrchr.

 

Hvis legge til en annen config fil er det eneste programmet skal gjøre, hvorfor lage et program ut av det, og ikke et bash script event. bat fil avhengig av OS?

Lenke til kommentar
Du kunne også brukt strtok() til å finne siste argument. Selv om den nevnte funksjonen gjør slemme ting med strengen.
Slemme ting? Den gjør bare det den skal. :p I så fall kan man bare kopiere stringen først. F eks i dette tilfellet:
#include <stdio.h>
#include <string.h>

#define BUFSZ 256

/* f eks jodel/truddel/stil.txt blir til stil.txt */
char *basename(char *filepath)
{
char *tok;
char *last;

last = tok = strtok(filepath, "/\\");
while (tok)
{
	last = tok;
	tok = strtok(NULL, "/\\");
}

return last;
}

/* f eks */
int main()
{
for (;;)
{
	char buf[BUFSZ];
	char bak[BUFSZ];
	char *filename;

	printf("Enter filepath: ");
	fgets(buf, BUFSZ, stdin);
	switch (buf[0]) {case 'q': case 'Q': exit(0);}
	strcpy(bak, buf);
	filename = basename(buf);
	printf("File path: %sFile name: %s", bak, filename);
}

return 0;
}

Selvfølgelig, her finnes det funksjoner som allerede er skrevet, men er ikke alle C programmereres drøm å skrive det meste vi bruker fra scratch? :p

Endret av LostOblivion
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...