Seite 1 von 1

[gelöst] Serialisierung von einer struct in eine Datei

Verfasst: 17. Oktober 2017 09:08
von Tomaxx
Hallo, guten Morgen!

Ich versuche, eine Structure in eine Datei zu schreiben, als Datentransfer in ein anderes Programm.

Folgender Code:

Code: Alles auswählen

typedef struct pumpe{
public:
    QString hersteller = "";
    QString modell = "";
    QString seriennummer = "";
    QString kunde = "";
    QString projekt = "";
}pumpe_t;

bool MainWindow::pump2struct(){
    pumpe_t exportdaten[1];
    bool export_p = true;
    exportdaten[0].hersteller = ui->i_hersteller->text() + "\n";
    exportdaten[0].modell = ui->i_typ->text() + "\n";
    exportdaten[0].seriennummer = ui->i_serial->text() + "\n";
    exportdaten[0].kunde = ui->i_kunde->text() + "\n";
    exportdaten[0].projekt = ui->i_projekt->text() + "\n";
    string fileName = QFileDialog::getSaveFileName(this, tr("Exportieren"), QDir::currentPath(), "Export (*.pppex)").toStdString();
    ofstream output_file(fileName, ios::binary);
    output_file.write((char*)&exportdaten, sizeof(exportdaten));
    output_file.close();
}
produziert in meiner Exportdatei ohne Fehlermeldungen bloss binären Müll (nach jeder Ausführung anderen).

Was mache ich falsch?

Re: Serialisierung von einer struct in eine Datei

Verfasst: 17. Oktober 2017 10:22
von odt
QString ist quasi ein Pointer auf einen String. Daher musst Du die Datenfelder einzeln speichern (serialsieren).
Schau Dir mal QDataStream an.

Re: Serialisierung von einer struct in eine Datei

Verfasst: 17. Oktober 2017 10:25
von Tomaxx
Ah, dann muss ich string statt QString verwenden....?

Re: Serialisierung von einer struct in eine Datei

Verfasst: 17. Oktober 2017 11:16
von odt
Hmm, string = std::string? Ich bezweifle, dass es damit klappt.

Wenn Du den Struct als ein Memory-Block möchtest (damit Du ihn en Block speichern kannst), müsstest Du mit char hersteller[ 256 ] arbeiten, was ich Dir aber nicht empfehle!

Generell empfinde ich das Speichern als einen binäreren Block nicht gut. Was wenn ein neues Feld hinzukommt? Big/LittleEndian? 32/64bit?

Schau Dir http://doc.qt.io/qt-5/qdatastream.html an.

Re: Serialisierung von einer struct in eine Datei

Verfasst: 18. Oktober 2017 08:44
von Tomaxx
Besten Dank, das hat mir geholfen. Habs jetzt damit gelöst