mit C++ einen Ordner mit variablem Namen anlegen und Datei dort speichern



  • Hallo,

    eins vorweg. Ich bin ein Neuling was Programmierung und Linux angeht, muss mich aber für das Studium damit auseinandersetzen.

    Ich ärgere mich nun schon eine ganze Weile mit einem Problem herum. Auch Google und die interne Suche haben nicht das zu Tage gefördert, was ich suche und hoffe, dass mir hier jemand weiterhelfen kann.

    Mein Programm soll folgendes können.
    Während der Laufzeit wird eine Integer-Variable von User eingelesen. Abhängig von der Variable werden Ergebnisse ermittelt. Diese Ergebnisse muss ich auf der Festplatte in einem noch nicht existenten Ordner speichern.

    Durch die Suche bin ich schon auf _mkdir gestossen, habe aber nur Beispiele für fixe Namen gefunden. Ich möchte aber, dass, wenn die Variable z.B. 61 ist, dass ein Ordner mit dem Namen 61 erstellt wird und das Programm dann in dem Ordner ein Textdokument ablegt.

    Würde mich freuen, wenn Ihr mir weiter helft.

    Gruß,
    cpp-neuling



  • #include <sstream>
    #include <sys/stat.h>
    #include <sys/types.h>
    
    void create_dir_from_int(int n) {
      std::stringstream ss;
      ss<<n;
      if(!mkdir(ss.str().c_str(),0755)
        throw something();
    }
    


  • Für diese Klasse von Problemen eignet sich die header-only-Bibliothek lexical_cast von boost exzellent. Damit kannst du zwischen int, string etc beliebig umwandeln (natürlich freie Software).

    http://boost.org

    mfg, Hans
    :schland: ➡ 🙂



  • @Golem86
    Danke für den Beitrag, allerdings kann ich nur auf Funktionen zugreifen, die das Betriebssystem bietet, da das Programm auf einem Rechner in der Uni laufen muss. 🙂

    @thomas001
    Also Dein Hinweis hat perfekt funktioniert! Danke schön!
    Kannst Du mir auch dabei helfen, in dem erstellten Ordner eine Textdatei zu erzeugen, die ebenfalls einen dynamischen Integer-Namen erhalten soll?

    Gruß,
    Torsten



  • torstenschmitz schrieb:

    Kannst Du mir auch dabei helfen, in dem erstellten Ordner eine Textdatei zu erzeugen, die ebenfalls einen dynamischen Integer-Namen erhalten soll?

    Das ist dasselbe wie oben, nur in grün und mit Standardmitteln lösbar:)

    #include <sstream>
    #include <fstream> // datei-bearbeitung
    #include <string>
    
    void create_file_from_int(const std::string& foldername, int n) { 
      std::stringstream ss;
      ss << n; 
      std::ofstream file((foldername + '/' + ss.str()).c_str(), std::ios::out);
      if(!file)
        throw something(); 
    }
    

    aber zum selber lernen solltest du für so etwas eine Referenz zu rate ziehen. Geht auch schneller als auf Antworten zu warten 😉
    Entweder du kaufst dir in gutes Einsteigerbuch (schau mal bei den Buchbewertungen) oder du schaust z.B. auf cppreference.com oder eine anderen Referenz deiner Wahl (Dinkumware, cplusplus.com, MSDN, ...)



  • torstenschmitz schrieb:

    @Golem86
    Danke für den Beitrag, allerdings kann ich nur auf Funktionen zugreifen, die das Betriebssystem bietet, da das Programm auf einem Rechner in der Uni laufen muss. 🙂

    Ich geh mal davon aus, dass dus dort auch kompilieren musst, da du es sonst einfach statisch linken könntest. Zu Kompilieren brauchst du logischerweise Quellcode. Diesem Quellcode könntest du doch auch einfach die (header-only) boost-Libs hinzufügen (freie Software). Bis auf komplexere Dinge wie boost::thread oder boost::date_time usw. muss man die Boost-Bibliotheken nur als header einbinden (oder PCH). Ich hoffe, das hilft dir weiter. (BTW: Du kannst auch auf Windoof oder sogut jedem anderen OS Generic binaries crosscompilieren, sodass die dann auf dem Unirechner laufen und sei es als Vollemulation mit qemu).

    mfg, Hans



  • Golem86 schrieb:

    torstenschmitz schrieb:

    @Golem86
    Danke für den Beitrag, allerdings kann ich nur auf Funktionen zugreifen, die das Betriebssystem bietet, da das Programm auf einem Rechner in der Uni laufen muss. 🙂

    Ich geh mal davon aus, dass dus dort auch kompilieren musst, da du es sonst einfach statisch linken könntest. Zu Kompilieren brauchst du logischerweise Quellcode. Diesem Quellcode könntest du doch auch einfach die (header-only) boost-Libs hinzufügen (freie Software). Bis auf komplexere Dinge wie boost::thread oder boost::date_time usw. muss man die Boost-Bibliotheken nur als header einbinden (oder PCH). Ich hoffe, das hilft dir weiter. (BTW: Du kannst auch auf Windoof oder sogut jedem anderen OS Generic binaries crosscompilieren, sodass die dann auf dem Unirechner laufen und sei es als Vollemulation mit qemu).

    mfg, Hans

    Das wird aber seinen Prof nen Sch**** interessieren...


Log in to reply