Gå til innhold

[Løst]finne eget exe-navn


Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet (endret)

ikke løst! :wallbash:

 

etter en halvtime med googling (er ikke værdens beste søker da)

 

#include <iostream.h> 

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

:)

Endret av Hans_Henrik
Skrevet
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?

Skrevet (endret)

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
Skrevet
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?

Skrevet

siden programmet heter TestServ så regner jeg med at dette har litt akademisk interesse for trådstarter.

 

Hvis du bruker windows kan du få tak i .exe fila ved å bruke GetModuleFileName

TCHAR filename[256];

GetModuleFileName(NULL, filename, 256);

Skrevet (endret)
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
Skrevet

[har ikke vært mye på pc'en i det siste, min hoved-pc kunne ikke starte takket være idiotisk strøm-kabel]

 

takk, har klart meg med en annen kode jeg fant "wldcmp", men da måtte navnet være hard-coda i programmet, så skal bytte det ut :!:

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...