knuto Skrevet 5. januar 2006 Skrevet 5. januar 2006 Hei! Eg har oppdaga eit lite problem, men det kan godt vere at det er ufatteleg lett å løyse. Eg utvikler eit program. Dette programmet har ei språkfil (norwegian.lng) som det laster inn ved oppstart. Denne språkfila ligg i same mappe som programmet. Problemet mitt er å få lest denne fila med bruk av dynamiske stiar. Viss eg berre brukar "./norwegian.lng" som fil-argumentet til ifstream vil ikkje programmet finne fila viss programmet er starta frå ei anna mappe slik (win-console): D:/Diverse/> P:/eksempelprogram/Start.exe -l norwegian Då vil faktisk fstream leite i D:/Diverse etter språkfila ...
charlie di meola Skrevet 5. januar 2006 Skrevet 5. januar 2006 finnes sikkert en mer elegant måte men å bruke argv[0] (strrchr for å finne siste \) er ikke så vanskelig.
dayslepr Skrevet 5. januar 2006 Skrevet 5. januar 2006 tenkte på det samme, men vil det fungere om programmet ligger i path'en?
kjetil7 Skrevet 5. januar 2006 Skrevet 5. januar 2006 tenkte på det samme, men vil det fungere om programmet ligger i path'en? 5389780[/snapback] Det fungerer ikke i Windows, men gjør det i Cygwin. Så jeg går ut i fra at det også fungerer i Linux. I Windows kan du bruke GetModuleFileName() eller lignende.
TorsteinP Skrevet 16. januar 2006 Skrevet 16. januar 2006 Første commandline parameter er alltid selve programmet med full path uansett hva som er gjeldende katalog. D:/Diverse/> P:/eksempelprogram/Start.exe -l norwegian Parameter 1 er P:/eksempelprogram/Start.exe Parameter 2 er -l Parameter 3 er norwegian Bare å erstatte Start.exe med norwegian.lng
kjetil7 Skrevet 16. januar 2006 Skrevet 16. januar 2006 Første commandline parameter er alltid selve programmet med full path uansett hva som er gjeldende katalog. D:/Diverse/> P:/eksempelprogram/Start.exe -l norwegian Parameter 1 er P:/eksempelprogram/Start.exe Parameter 2 er -l Parameter 3 er norwegian Bare å erstatte Start.exe med norwegian.lng 5445962[/snapback] Foreslår at du leser svarene over litt bedre eller komme med litt kode som kan bekrefte det du sier...
TorsteinP Skrevet 24. januar 2006 Skrevet 24. januar 2006 Foreslår at du leser svarene over litt bedre eller komme med litt kode som kan bekrefte det du sier... 5446502[/snapback] Har faktisk lest svarene ovenfår. Det er din påstand at det ikke fungerer i Windows. Alle utviklingsverktøy jeg har brukt (alle av de mest kjente) støtter argv[0] == aplikasjon med katalogsti.
charlie di meola Skrevet 24. januar 2006 Skrevet 24. januar 2006 testet det på vs6 nå og kan underbygge kjetil sin påstand
kjetil7 Skrevet 26. januar 2006 Skrevet 26. januar 2006 Foreslår at du leser svarene over litt bedre eller komme med litt kode som kan bekrefte det du sier... 5446502[/snapback] Har faktisk lest svarene ovenfår. Det er din påstand at det ikke fungerer i Windows. Alle utviklingsverktøy jeg har brukt (alle av de mest kjente) støtter argv[0] == aplikasjon med katalogsti. 5489442[/snapback] Det fungerer ikke når applikasjonen ligger i %path% environment-variablen. Det var tross alt det jeg svarte på (derfor jeg siterte dayslepr). Din påstand er dermed ikke riktig. Med teskje: Du starter notepad fra hjemmekatalogen din: C:\Documents and Settings\myuser\my documents>notepad.exe argv[0] er da *ikke* c:\windows\notepad.exe slik du hevder! I Cygwin (og sannsynligvis Linux) er den derimot det. Derfor bør du bruke GetModuleFileName() eller lignende i Windows. charlie di meola bekreftet også dette i innlegget over ... Hvis du vil sjekke selv kan du jo se selv slik jeg gjorde før jeg kom med påstanden min: #include <iostream> int main(int argc, char *argv[], char *envp[]) { for(int i=0; i<argc; i++) { std::cout << "argv[" << i << "]: " << argv[i] << std::endl; } }
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å