Fortlaufende Verzeichniserstellung mit system-Befehl unter Linux



  • Hallo

    Bin ein absoluter Anfänger in Sachen C++ und will aber folgendes Problem lösen und komm nicht weiter.

    Ich arbeite an einem Linux rechner und will über den Befehl system("...") Befehle direkt ausführen auf der Konsole.
    An sich funktionierts ganz gut, aber jetzt würd ich gern neue Verzeichniss erstellen die fortlaufend nummeriert sind. Dazu will ich das ganze in eine for-Schleife packen

    double i;

    for(int k=0;k<10;k++){
    i = system("mkdir /Test....")

    }

    und jetzt sollte halt durch die Laufvariable k fortlaufend Test1,Test2, usw entstehn.

    Wie kann ich das bewerkstelligen?

    Danke schon mal!



  • #include <string>
    #include <sstream>
    // ...
    std::string command("mkdir /tmp/Test");
    std::istringstream stream;
    
    for(...){
      stream.str(command);
      stream << k;
      system(stream.str());
    }
    


  • Hallo,

    danke für die schnelle Antwort,aber bei mir funktioniert der Code leider nicht
    Ich bekomme als Fehlermeldung

    error: no match for 'operator<<' in 'stream << k'
    error: cannot convert `std::basic_string<char



  • Sorry, Flüchtigkeitsfehler. Mach aus istringstream nur stringstream.



  • Sorry wenn ich dich damit jetzt nerve, aber ich krieg daraufhin folgende Fehlermeldung..(Ich bemüh mich zwar selber rauszufinden was das heißt und wie ich es beheben kann, aber ich denk das Forum ist einfach schneller)

    error: cannot convert std::basic_string<char, std::char_traits<char>, std::allocator<char> >' toconst char*' for
    argument `1' to `int system(const char*)'

    in der for schleife deklariere ich k als int also wie im ersten Beitrag geschrieben. Liegt das der Fehler?



  • Der Fehler ist, dass str() einen String zurückgibt, aber System einen const char* erwartet - glücklicherweise hat String eine Methode, die einen const char* zurückgibt:

    system(stream.str().c_str());
    


  • Ah, noch ein Flüchtigkeitsfehler. Hab das eben nur mit cout getestet, wollte mir nicht die Festplatte zumüllen. 😉



  • Puhhh. Danke.
    Aber ich hoffe das ist jetzt die letzte Frage. Er setzt mir die Variable k jetzt immer an den Anfang von dem string. Ich bekomm "0kdir ...." statt "mkdir".

    Ich sehe, ich muss noch viel lernen.



  • edit



  • #include <string>
    #include <sstream>
    #include <iostream>
    
    int main( ) {
    
    	std::string command( "mkdir /tmp/Test" );
    	std::stringstream stream;
    
    	for( int k = 0; k < 10; ++k ) {
    
    		stream.str( command ); // lässt die Leseposition unverändert...
    		stream.seekp( 0, std::ios_base::end ); // ...deshalb manuell an's Ende setzen.
    
    		stream << k;
    
    		std::cout << stream.str( ) << std::endl;
    	}
    }
    

    greetz, Swordfish



  • Ausgezeichnet!!!!!

    Danke



  • EDIT, mein Fehler


Anmelden zum Antworten