Überschreiben in Dateien



  • Hallo,

    ich habe folgendes Programm:

    #include<iostream>
    #include<fstream>
    #include<string>
    using namespace std;
    
    int main(){   
    
    fstream schreiben;
    
    schreiben.open("aufgabe2.asc", ios::out | ios::in | ios::trunc);
    
    for(int l = 1; l <= 5; l++)
    {
       for(int i = 1; i <= 60; i++)
          schreiben << i % 10;
       schreiben << "  " << l << endl;
    }
    schreiben.seekg(0);
    
    int f=0;
    char ch;
    while(f<319 && !schreiben.eof())
    {schreiben.get(ch);
    cout << ch;
    ++f;
    }
    schreiben.clear();
    
    cout << "\nAb dem wievielten Zeichen soll etwas veraendert werden : ";
    int n;
    cin >> n;
    cout << "\nWieviele Zeichen sollen veraendert werden : ";
    int m;
    cin >> m;
    cout<<"\n";
    
    schreiben.seekp(0);
    schreiben.seekp(n);
    for(int k=0;k<m;k++)
    {
        schreiben<<'*';
    }    
    
    schreiben.seekg(0);
    
    f=0;
    while(f<330 && !schreiben.eof())
    {schreiben.get(ch);
    cout << ch;
    ++f;
    }
    schreiben.clear();
    
    return 0;
    }
    

    Es schreibt Daten in eine Datei und gibt sie auf dem Monitor aus und das Programm soll dann ab dem n-ten Zeichen m Zeichen mit * überschreiben. m und n gibt der Benutzer ein. Warum klappt das Überschreiben bei meinem Programm nicht richtig?

    Vielen, vielen Dank für die Hilfe im voraus!



  • Warum hast du "schreiben.clear()" gesetzt?
    Mit *.clear wird - wenn ich mich nicht irre - der Dateiinhalt gelöscht.
    Könnte der/ein Fehler sein...

    mfg



  • XCoder++ schrieb:

    Warum hast du "schreiben.clear()" gesetzt?
    Mit *.clear wird - wenn ich mich nicht irre - der Dateiinhalt gelöscht.
    Könnte der/ein Fehler sein...

    Du irrst Dich 😉 . Damit werden nur die State-Flags zurückgesetzt.

    @Anfänger2007: Das Problem ist, dass Du die Datei mit ios::trunc öffnest, was dafür sorgt, dass die Länge der Datei auf 0 gekürzt, also gelöscht wird (nur der Inhalt, nicht die Datei ⚠ ).



  • Ja habe trunc weggemacht , aber das Programm überschreibt nicht richtig...Es fängt an der richtigen Stelle an und schreibt die richitge Anzahl an Zahlen, aber er hängt sie dazwischen anstatt zu überschreiben??



  • Ob man den Text einfach überschreiben kann, weiß ich jetzt nicht. Aber ich finde jetzt auf die schnelle keine Flag oder Funktion dafür, wahrscheinlich musst du das selbe erledigen.



  • Anfänger2007 schrieb:

    Ja habe trunc weggemacht , aber das Programm überschreibt nicht richtig...Es fängt an der richtigen Stelle an und schreibt die richitge Anzahl an Zahlen, aber er hängt sie dazwischen anstatt zu überschreiben??

    Also das ist seltsam - nach meiner Erfahrung überschreibt ein fstream den alten Dateiinhalt, wenn er etwas ausgeben soll. (deswegen ist es auch so schwierig, Zeichen in eine Datei einzufügen).


Anmelden zum Antworten