ofstream: mode nachträglich ändern (setf(ios::app))



  • Hallo Forum,
    ich brauche eine Funktion welche einmal ans Ende der Datei schreibt und einmal anhand einer Position Daten überschreibt. Ich habe es mit setf() probiert, aber da wird immer von Anfang weg neu geschrieben. Gibt es noch eine andere Variante?

    int writeNodeDataBinary(string const path, Node& const n, intu const firstByte) {
      int lastByte = -1;
      ofstream f(path, ios::binary);
      if (firstByte == 0) f.setf(ios::app);                       //mode zum Daten anhängen
      else f.setf(ios::in);                                       //mode zum Daten überschreiben
      if (!f) return lastByte;                                    //Fehler bei Open
      // Node-Daten schreiben
      if (firstByte > 0) f.seekp(firstByte);                      //Schreibposition
      f.write((char*)&n.nr_, sizeof(intu));
      f.write((char*)n.name_.c_str(), n.name_.length());
      f.write((char*)&n.status_, sizeof(int));
      if (f) {
        lastByte = f.tellp();                                     //nächste freie Position
      }
      f.close();
      return lastByte;
    } /// end func writeNodeDataBinary
    

  • Mod

    Öffne die Datei nachdem du ermittelst hast, was du willst?

    Außerdem: Rate nicht rum! Wenn du die Dokumentation von setf gelesen hättest, wäre ja wohl klar, dass es da um gänzlich andere Flags geht.



  • @SeppJ sagte in ofstream: mode nachträglich ändern (setf(ios::app)):

    Öffne die Datei nachdem du ermittelst hast, was du willst?

    Das geht nicht weil nach dem if/else Block der ofstream nicht erkannt wird.


  • Mod

    So so.



  • @SeppJ sagte in ofstream: mode nachträglich ändern (setf(ios::app)):

    So so.

    Das ist nicht sehr hilfreich.
    if(..) ofstream f ... app
    else ofstream f ... in

    Hier wird f nicht mehr erkannt


  • Mod

    if (irgendwas) openmode = wasauchimmer;
    else openmode = irgendwasanderes;
    ofstream file(..., openmode);
    

    oder (ist schließlich auch nicht verboten)

    ofstream file;
    if (irgendwas) file.open(..., wasauchimmer);
    else file.open(..., irgendwasanderes);
    

    Das ist nicht sehr hilfreich.

    Ich setze voraus, das du weißt, wie if-Abfragen und Variablen funktionieren. Das ist zweites Kapitel im Anfängerbuch. Wenn du das nicht kannst, übernimmst du dich gerade gewaltig und musst erst einmal lernen, lernen, lernen! Das ist aber etwas Gutes! Die Sprache, die man spricht, sollte man schon (zumindest grob) können.



  • @SeppJ Danke für die Antwort und die Anregung. Jetzt funktioniert es,
    lg heinz


Anmelden zum Antworten