Nach Datei lesen kein schreiben möglich



  • Hi. Bin gerade dabei einen Vokabeltrainer zu programmieren. Die Vokabeln sollen in einer Datei gespeichert werden. Ich hab bis jetzt eine Methode die mir die Zeilen der Datei ermittelt und eine die mir einen Text in die Datei schreiben soll. Wenn ich die erste Methode aufrufe, also die zum Zeilen ermitteln, kann ich danach nicht mehr in die Datei schreiben. Und ich hab absolut keine Ahnung warum das so ist.

    int main (void)
    {
            int Zeilen;
            Daten D1;
            fstream Datei;
            Datei.open("vokabel.txt", ios::in|ios::out);
            Zeilen = D1.AnzahlZeilen(Datei);
            cout << Zeilen;
            D1.SchreibeZeile(Datei);
    }
    
    int Daten::AnzahlZeilen(std::iostream & Datei)
    {       int Zaehler = 0;
            char Text[200];
            while (Datei.getline(Text, 200))
                    {
                    Zaehler++;
                    }
            return Zaehler;
    }
    
    void Daten::SchreibeZeile(std::iostream & Datei)
    {       char Text[100];
            Datei.seekp(0L, ios::end);
            cout << "Bitte geben sie den Text ein: ";
            cin.getline(Text,100);
            Datei << "\n" << Text;
    
    }
    

    Das mit dem Zeilen ermitteln geht garantiert auch einfacher aber mir geht es momentan nur darum warum ich nach dem Zählen nichts mehr in die Datei schreiben kann. Ohne Zählen geht es wunderbar.

    Vielen Dank im Voraus!

    Gruß Alex



  • Versuchs mal mit Datei.clear in SchreibeZeile



  • Jetzt geht es. Danke!

    Wenn du noch verraten kannst warum das so ist währe das super 🙂



  • AlexDozer schrieb:

    Wenn du noch verraten kannst warum das so ist währe das super 🙂

    Nachdem du die Datei komplett gelesen hast, ist das eof-Bit (und dadurch auch das fail-bit) des Stroms gesetzt. In diesem Zustand, schlägt jede weitere Lese-/Schreiboperation fehl. Durch das clear() löschst du die Fehlerbits des Stroms und ermöglichst somit wieder Lese-/Schreiboperationen.



  • Alles klar. Danke!


Anmelden zum Antworten