Programmparameter abfragen
-
Hallo,
gibt es eine Methode mit der ich den oder die übergebenen Programmparameter abfragen kann?
GetCommandLine gibt mir den Aufrufpfad zurück
Jedoch wenn ich über eine Verknüpfung den Parameter über gebe sieht es folgendermaßen aus
"Pfad\usw\Programm" -Parameterin der Konsole das was ich eingegeben habe
prog -Parametererscheint mir äußerst umständlich das zu parsen
Gruß Raffzen
-
Ich wüsste keine andere Möglichkeit
aber da mich das auch mal interresiert hat hab ich mal was geschrieben.
Obs schön ist ist die andere Frage aber hier:void CCmdLineView::OnButton1() { CString szArg = (CString)GetCommandLine(); CStringList ArgList; int argCnt = GetParamater(szArg, &ArgList); } WORD CCmdLineView::GetParamater(CString szArg, CStringList* ArgList) { int iPos = szArg.Find(".exe",0); int iPos2; WORD cnt = 0; CString szTemp; szArg = szArg.Mid(iPos+5); // Parameter abgeschnitten while (szArg.Find("-") != -1) { cnt++; iPos = szArg.Find("-"); szArg = szArg.Mid(iPos+1); iPos2 = szArg.Find("-"); if (iPos2!=-1) { szTemp = szArg.Mid(iPos-1,iPos2-1); szArg = szArg.Mid(iPos2); szTemp.TrimRight(); ArgList->AddTail(szTemp); } else { szTemp = szArg.Mid(iPos-1); szTemp.TrimRight(); ArgList->AddTail(szTemp); break; } } return cnt; }
-
Ich hatte mir das in eine Map eingespeichert.
#pragma warning(disable: 4786) #include <map> #inclde <string> using std::map; using std::string; typedef map<string, string> Parameter; int main(int argc, char* argv[]) { // Der Programmname interessiert uns nicht. --argc; ++argv; Parameter params; for(int i = 0; i < argc; i+=2) { params[argv[i]] = argv[i+1]; } // oder so /* for(int i = 0; i < argc; ++i) { params[argv[i]] = argv[++i]; } */ return 0; }
Somit sind alle Parameter in einer Map.
Bei "./testprogramm -silent yes -path /home/egon" kann man die Map nun auf "-silent" und auf "-path" abfragen.
-
aber in einer MFC Anwendung kann ich doch nicht mit int main(...) kommen oder?
-
in der Funktion
WORD CCmdLineView::GetParamater(CString szArg, CStringList* ArgList) { int iPos = szArg.Find(".exe",0); int iPos2; .......
ich kann das Prog in der Konsole ohne .exe aufrufen dann geht das auch nicht mehr
-
Hm, ja..
Aber du könntest dir die Commandozeile in einen std::string schreiben.
Hat der nicht eine Methode um ihn aufzusplitten?
-
hm
wenn du kein MFC benutzt ist mein Lösungsansatz sowieso unbrauchbarbei C++ sind die Parameter in argc und argv versteckt allerdings hab ich das noch nie gebraucht und daher spontan keine ahnung wie die da drin stehen.
-
Naja eigentlich wollte ich wissen ob mir irgendeine Funktion dabei hilft das zu zerlegen. Dem is aber net so.
Dann werde ich den AufrufString in 2 Fälle parsen
1. Aufruf mit "" dann such ich die Params nach den ""
2. Aufruf ohne dann suche ich nach dem ersten LeerzeichenSollte so in jedem Fall funktionieren
Gruß Raffzen
-
ich hätte mal ne frage stehen in einer MFC anwendung trotzdem argc und argv zu verfügung ?
so das man diese in InitInstance() abfragen kann?
-
in der MFC gibt es afaik eine eigene Methode dafür (ProcessCommandLine oder so ähnlich), die du aus InitInstance aufrufen kannst.