Frage zur Dateibehandlung



  • hallo,

    also ich habe folgende frage. der user gibt den namen der zu öffnenden datei ein.
    wie kann ich diesen namen welcher sicherlich in einem string steht in eine dateianweisung reinbringen.
    also so hier.

    cin>>name_der_datei;
    
    fstream datei;
     datei.open(**,ios::out); **=// was muss nun da als anweisung rein damit der eingebene name so übernommen wird also ob dort datei.open("Hallo.txt" ,ios::out); stehen würde
    ...
    

    kann mir da einer helfen??



  • Was sollte man da schon angeben - natürlich die Variable, in der der Nutzer den gewünschten Dateinamen eingetragen hat (da fstream keine std::string's als Namensangabe akzeptiert, mußt du noch den drunterliegenden char*-Puffer verwenden):

    string name;
    cin>>name;
    
    fstream datei;
    datei.open(name.c_str(),ios::out);
    


  • cool danke du bist mein held:D



  • ich habe ein neues problem. und zwar folgendes
    hier erstma der code:

    #include<iostream>
    #include<fstream>
    #include<string>
    #include<vector>
    
    using namespace std;
    
    int main()
    {
        vector<string> listen;
        string zahl;
    
        fstream datei;
    
        datei.open("Listen.txt",ios::in);
    
        while(datei)
        {
            datei>>zahl;
            listen.push_back(zahl);
    
         }
        datei.close();
        for(size_t i=0;i<listen.size();++i)
        {
            cout<<listen[i]<<endl;
        }
    }
    

    wenn ich diesen code ausführe und in meine datei"Listen.txt" schon vorher werte eingeschrieben habe. und diese dann mit dem code auslese wird mir immer der letzte wert doppelt ausgegeben, das möchte ich verhindern weiß jemand wie??



  • Der Grund dafür ist, dass die Dateiende-Kennung erst gesetzt wird, wenn Du über den letzten Wert hinausliest. Es passiert also folgendes, nachdem bereits alle Werte der Datei gelesen wurden:

    while(datei) // prüfe ob datei ok (das trifft noch zu)
        {
            datei>>zahl; // versuche zu lesen -> fehler, weil Datei am Ende. Jetzt ist datei auch als ungültig markiert
            listen.push_back(zahl); // hänge Zahl an liste, obwohl nichts gelesen wurde; Zahl enthält daher noch den vorherigen Wert
    
         }
    

    Eine mögliche Lösung:

    while(datei >> zahl) // prüfe ob lesevorgang erfolgreich
        {
            listen.push_back(zahl); // hänge Zahl an liste
        }
    


  • cool danke


Anmelden zum Antworten