Erstes Zeichen einer Datei ändern



  • Wie kann ich das erste Zeichen einer Datei ändern?

    //in Datei Speichern
    string file = dir+"\\termine.dat";
    ofstream stream(file.c_str(),ios::app|ios::binary);
    if(stream)
    {
        stream<<boolalpha
         <<a<<endl<<titel<<endl
         <<klasse<<endl
         <<typ<<endl
         <<vorlauf<<endl
         <<periode<<endl
         <<vornHinten<<endl
         <<keep<<endl
         <<merken<<endl
         <<ende<<endl;
    }
    

    Wenn a jetzt "1" oder "0" ist, wie kann ich das ändern. Wenn ich einfach so mit stream.seekp(0) den Cursor setzte und dann schreibe steht in der Datei nur noch "0" oder "1". Ich möchte eigendlich nich jedesmal die ganze Datei neu schreiben 😕



  • Hallo,
    das kommt ein bischen darauf an, was du genau willst.

    Wenn die Datei z.B. existiert und du immer nur das erste Zeichen eines neuen Datensatzes ändern willst, dann geht das so:

    // Datei muss existieren : ios::in | ios::out
    // Beim öffnen ans Ende der Datei gehen : ios::ate
    ofstream file ("aendern.txt", ios::in|ios::out|ios::ate);
    if (file)
    {
        // Position merken an der wir mit dem Schreiben beginnen
        std::streampos pos = file.tellp();
        bool b = false;
        file << b 
             << "Hallo Welt" << endl;
        file << "Wie geht's so?" << endl;
        // an den Anfang des Datensatz gehen
        file.seekp(pos, ios::beg);
        // und neuen Wert schreiben
        file << !b;
    }
    

    Wenn hingegen die Datei nicht existiert bzw. immer wieder neu geschrieben werden soll, geht's so:

    ofstream file ("aendern.txt");
    if (file)
    {
        bool b = false;
        file << b 
             << "Hallo Welt" << endl;
        file << "Wie geht's so?" << endl;
        file.seekp(0, ios::beg);
        file << !b;
    }
    

    Und kombiniert:

    std::streampos pos;
    ofstream file;
    file.open("aendern.txt", ios::in|ios::out|ios::ate);
    // Falls Datei existiert, neuen Datensatz anhängen.
    if (file.is_open())
    {
        pos = file.tellp();
    }
    else
    {   // Sonst Datei erzeugen
        file.clear();
        file.open("aendern.txt", ios::out);
        assert(file.is_open());
        pos = file.tellp();
    }
    
    // Jetzt ganz normal weiter
    bool b = false;
    file << b 
         << "Hallo Welt" << endl;
    file << "Wie geht's so?" << endl;
    file.seekp(pos, ios::beg);
    file << !b;
    

Anmelden zum Antworten