pfade leerzeichen und parameterübergabe



  • ohmann sorry, hab den header #include <sstream>
    nicht drin gehabt.
    denn hatte ich sonst überall nur in der klasse nicht.
    sorry und vielen dank probiers jetzt mal weiter aus ob das so geht


  • Administrator

    Falls das nicht funktioniert, was drakon vorgeschlagen hat, denn ich sehe persönlich den Unterschied nicht, ausser dass es über einen langsameren stringstream geht, dann hätte ich gerne gewusst, was in der Variable aktuellesVerzeichnis drin steht.
    Ich wette irgendwas was mit "c:\dokumente" anfängt 🙂

    Grüssli



  • drakon schrieb:

    Ein Wunder, dass du das so überhaupt durch den Compiler kriegst..

    Wieso eigentlich nicht? Hier werden doch keine Zeiger addiert o.ä. (vorausgesetzt, aktuellesVerzeichnis ist ein std::string)?



  • Ich gehe mal davon aus, dass id kein string ist und daher gibt das nur Unsinn, wenn ein string und z.B ein integer addiert wird..



  • ja also es geht auch mit stringstream nicht

    aktuellesverzeichnis sieht folgendermaßen aus

    char Buff[512];
    						GetCurrentDirectory(512,Buff);
    						string aktuellesVerzeichnis=(string)Buff;
    

    in dem anderen programm das den parameter aufschlüssen soll mach ich das wie folgt

    string parameter=GetCommandLine(); 
    
    int verzeichnisindex=parameter.find("verzeichnis:");
    
    string verzeichnis=t.substr(d+12,t.size());
    

    und mit dem verzeichnis C:\Dokumente und Einstellungen hat er eben probleme.
    hatte ja versucht den string zusammenzuhalten mit anführungsstriche.



  • drakon schrieb:

    Ich gehe mal davon aus, dass id kein string ist und daher gibt das nur Unsinn, wenn ein string und z.B ein integer addiert wird..

    doch alles string

    void Dateienverwalter::starteKammermodellGenerator(string verzeichnis,string id,string ziel)
    {						
    
    						char Buff[512];
    						GetCurrentDirectory(512,Buff);
    						string aktuellesVerzeichnis=(string)Buff; 
    							/*string cpu="\"cpu:";
    						cpu+="1";
    						cpu+="modellid:";
    						cpu+=id;
    						cpu+="steps:";
    						cpu+="1000";
    						cpu+="verzeichnis:";
    						cpu+=ziel;
    						cpu+="\"";
    						string u="start /low "+aktuellesVerzeichnis+"\\Kammermodel.exe "+cpu;
    						//cpuModellZuordnung[aktuellecpu]=a.at(i).ModellID; //i=modellid	
    						Sleep(2000); //damit kammermodelldatei geschrieben wird (verzögerung durch windows)
    						system(u.c_str());
    						*/
    						std::stringstream parameter; 
    						parameter << "\"cpu:1modellid:" << id << "steps:1000verzeichnis:" << ziel << "\""; 
    						std::stringstream startaufruf; 
    						startaufruf << "start /low " << aktuellesVerzeichnis << "\\Kammermodel.exe " << parameter; 
    						Sleep(2000);
    						system ( startaufruf.str ().c_str() ); 
    }
    


  • Warum haben alle so freude am casten???

    string aktuellesVerzeichnis=(string)Buff;
    

    Ist einfach falsch.
    Aus dem Buffer soll ein std::string konstruiert werden.

    string aktuellesVerzeichnis(Buff);
    

    Simon



  • theta schrieb:

    Warum haben alle so freude am casten???

    string aktuellesVerzeichnis=(string)Buff;
    

    Ist einfach falsch.
    Aus dem Buffer soll ein std::string konstruiert werden.

    string aktuellesVerzeichnis(Buff);
    

    Simon

    also nur weil ich vezweifelt bin hab ich das jetzt mal versucht, aber wie ich mir schon gedacht hatte hat das auch nicht funktioniert.
    hatte gehofft das dadurch der string "ordentlich " ist aber ne geht immer noch nicht.

    wahrscheinlich sollte das auch nicht zu lösung beitragen oder?



  • wahrscheinlich sollte das auch nicht zu lösung beitragen oder?

    Nein, natürlich nicht... wie könnte ich auch...
    Simon



  • theta schrieb:

    wahrscheinlich sollte das auch nicht zu lösung beitragen oder?

    Nein, natürlich nicht... wie könnte ich auch...
    Simon

    ja hätte ja sein können


  • Administrator

    @mogli3,
    Ich wiederhole mich, was ist in aktuellesVerzeichnis drin? Was steht dort drin? Meiner Meinung nach beklagt sich nämlich das Shellkommando start über falsche Parameter.

    Grüssli



  • Dravere schrieb:

    @mogli3,
    Ich wiederhole mich, was ist in aktuellesVerzeichnis drin? Was steht dort drin? Meiner Meinung nach beklagt sich nämlich das Shellkommando start über falsche Parameter.

    Grüssli

    aktuellesVerzeichnis="c:\Dokumente und Einstellungen\user\Eigene Dateien\Visual Studio 2008\Projects\Kammermodelle Batch\Kammermodelle Batch"	
    
    typ=std::basic_string<char,std::char_traits<char>,std::allocator<char> >
    

    also soweit ich mein ist das einfach das aktuelleverzeichnis zufällig in einem pfad mit leerzeichen


  • Administrator

    mogli3 schrieb:

    also soweit ich mein ist das einfach das aktuelleverzeichnis zufällig in einem pfad mit leerzeichen

    Und genau das ist das Problem. Das Kommando start erwarte ja auch Parameter und das Kommando trennt die Parameter über die Leezreichen. Dein ursprünglicher Code, etwas abgeändert:

    string parameter="\"cpu:"; 
    parameter+="1"; 
    parameter+="modellid:"; 
    parameter+=id; 
    parameter+="steps:"; 
    parameter+="1000"; 
    parameter+="verzeichnis:"; 
    parameter+=ziel; 
    parameter+="\""; 
    stringstartaufruf="start /low \""+aktuellesVerzeichnis+"\\Kammermodel.exe\" "+parameter; // <- Gänsefüsschen um den Pfad für das Programm gemacht.
    system(startaufruf.c_str());
    

    Wenn ich übrigens schon dabei bin:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39453.html

    Du benutzt zudem schon die WinAPI, daher könntest du auch gleich ShellExecute oder CreateProcess verwenden.

    Grüssli


Anmelden zum Antworten