Variable & Datei



  • Hallo,
    gibt es eine einfache Möglichkeit, eine beliebige Variable in eine Datei zu schreiben (und herauszulesen)? Also ohne, dass ich immer einen eigenen Parser schreiben muss, der ein Objekt in einen String umwandelt und wieder zurück.



  • Ja. Solange die Variable keine Zeiger enthält, geht es mit dem binary-Stream ganz einfach.



  • Was für eine Variable ist das denn? Bei einfachen Typen kannst du mit den Stream-Operatoren >> und << sicher einiges erreichen (zur Not selber schreiben). Bei komplexeren Strukturen mußt du sicherstellen, daß du auch wirklich alle relevanten Bestandteile erfasst - das ist leider nicht so trivial zu lösen.



  • @ Kaesebrot: Hast du ein Code-Beispiel?

    @ CStoll: Ich hatte es mir so vorgestellt, dass das Objekt einfach so in die Datei geschrieben wird, wie es im Arbeitsspeicher liegt. Also jeder Member eben.
    Ich kenne das z.B. aus Ruby und Pascal. Theoretisch reicht also auch eine Möglichkeit, die ein beliebiges Objekt in einen String wandeln kann.



  • Für POD-Structs ohne Zeiger und Referenzen:

    #include <fstream>
    #include <iostream>
    
    struct foo {
      int x;
      int y;
    };
    
    int main() {
      struct foo bar = { 1, 2 };
      char const *const filename = "test.txt";
    
      {
        std::ofstream out(filename);
        out.write(reinterpret_cast<char*>(&bar), sizeof(bar));
      }
    
      bar.x = bar.y = 0;
    
      {
        std::ifstream in(filename);
        in.read(reinterpret_cast<char*>(&bar), sizeof(bar));
      }
    
      std::cout << bar.x << ", " << bar.y << std::endl;
    }
    

    Enthält dein Objekt eine virtuelle Funktionstabelle oder sonstige Verweise auf andere Daten, wirst du diese von Hand auflösen müssen. In der Regel macht man das, indem man operator<< und operator>> für std::ostream respektive std::istream überlädt.



  • Okay, vielen Dank für die Hilfe 👍


Anmelden zum Antworten