Variabel Dateien einlesen



  • Hallo,

    Ich will den Dateinamen der zu einlesenden Datei Variabel auswählen können bei meinem Programmstart.

    So geht es ja leider nicht :

    fstream inputFile("Fuu.txt", ios::in);
    

    So aber schon:

    ifstream input((char*) dateipfad.c_str(), ios::in);
    

    Das zweite ist doch C stil oder ? Ist das unter C++ nicht mehr möglich ?

    lg



  • Was willst du nochmal genau? Ich habs nicht verstanden. Kannst du genauer werden?



  • JayJoe schrieb:

    Das zweite ist doch C stil oder ? Ist das unter C++ nicht mehr möglich ?

    Möglich schon, aber du wirst vom Forum gehängt, wenn du das so machst (in C ist es übrigens nicht möglich).

    Es gibt da mehrere Sachen:
    - ios::in ist unnötig bei ifstream
    - In C++ gibt es const_cast, deins ist ein C-Style-Cast.
    - c_str() nach char* casten ist eine ganz schlechte Idee
    - c_str() nach char* casten ist hier nicht nötig
    - In C++11 ist c_str() nicht mehr nötig.

    Kurz:

    ifstream input(dateipfad.c_str()); // Altes C++
    ifstream input(dateipfad);         // Neues C++
    


  • Was ich machen will ich habe eine Klasse in der ich eine Datei einlesen will.
    Den Dateipfad will ich aber über meine "main" an meine Klasse übergeben, und nicht fest verbauen.

    Also:

    int main(int argc, char** argv) {
    
        std::string dateiname="Fuu.txt";
    
        Statistik * statistik = new Statistik();
    
        statistik->DateiEinlesen(dateiname);
    }
    

    und

    void Statistik::DateiEinlesen(string dateipfad) {
    
        ifstream input((char*) dateipfad.c_str(), ios::in);
    
    }
    

    So funktioniert das ganze ja... Aber nunmal nicht aktueller Stil :p

    Funktioniert das jetzt auch so :

    void Statistik::DateiEinlesen(string dateipfad) {
    
        fstream inputFile("dateipfad", ios::in);;
    
    }
    

    ?



  • void Statistik::DateiEinlesen(string dateipfad) {

    fstream inputFile(dateipfad, ios::in);;

    }

    ohne "" natürlich



  • JayJoe schrieb:

    und

    ifstream input((char*) dateipfad.c_str(), ios::in);
    

    So funktioniert das ganze ja... Aber nunmal nicht aktueller Stil

    aktueller Stil ist, wie schon jemand gesagt hat:

    ifstream input(dateipfad.c_str());
    


  • alles klar danke



  • Benutze bitte die Code-Tags.

    void Statistik::DateiEinlesen(std::string path) { 
        fstream file(path);
    }
    

    For ifstream and ofstream classes, ios::in and ios::out are automatically and respectively assumed, even if a mode that does not include them is passed as second argument to the open() member function.



  • JayJoe schrieb:

    int main(int argc, char** argv) {
    
        std::string dateiname="Fuu.txt";
        
        Statistik * statistik = new Statistik();
        
        statistik->DateiEinlesen(dateiname);
    }
    

    Gibt es einen besonderen Grund, warum du nicht

    int main(int argc, char** argv)
    {
        std::string dateiname="Fuu.txt";
        Statistik stat;
        stat.DateiEinlesen(dateiname);
    }
    

    geschrieben hast?


Anmelden zum Antworten