Hans_Henrik Skrevet 18. november 2008 Del Skrevet 18. november 2008 (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 19. november 2008 av Hans_Henrik Lenke til kommentar
Hans_Henrik Skrevet 18. november 2008 Forfatter Del Skrevet 18. november 2008 (endret) ikke løst! 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 19. november 2008 av Hans_Henrik Lenke til kommentar
zotbar1234 Skrevet 18. november 2008 Del Skrevet 18. november 2008 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
Hans_Henrik Skrevet 19. november 2008 Forfatter Del Skrevet 19. november 2008 (endret) Dam du har rett ok da, ikke løst Endret 19. november 2008 av Hans_Henrik Lenke til kommentar
Kagee Skrevet 19. november 2008 Del Skrevet 19. november 2008 Er det ikke «bare» å finne teksten fra høyre fram til første / eller \ ? Lenke til kommentar
zotbar1234 Skrevet 19. november 2008 Del Skrevet 19. november 2008 Er det ikke «bare» å finne teksten fra høyre fram til første / eller \ ? Hva med symlinks da? Lenke til kommentar
Rescudo Skrevet 19. november 2008 Del Skrevet 19. november 2008 (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 19. november 2008 av Rescudo Lenke til kommentar
Roptaty Skrevet 23. november 2008 Del Skrevet 23. november 2008 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
GeirGrusom Skrevet 23. november 2008 Del Skrevet 23. november 2008 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); Lenke til kommentar
Harkonnen Skrevet 1. desember 2008 Del Skrevet 1. desember 2008 Du kunne også brukt strtok() til å finne siste argument. Selv om den nevnte funksjonen gjør slemme ting med strengen. Lenke til kommentar
steingrim Skrevet 1. desember 2008 Del Skrevet 1. desember 2008 Eller basename() fra libgen.h (en del av posix). Lenke til kommentar
LostOblivion Skrevet 3. desember 2008 Del Skrevet 3. desember 2008 (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. 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? Endret 3. desember 2008 av LostOblivion Lenke til kommentar
Hans_Henrik Skrevet 3. desember 2008 Forfatter Del Skrevet 3. desember 2008 [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 :!: Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå