Fstream Problem



  • Hallo, ich habe ein Problem beim speichern meiner Klasse in eine .txt Datei, anscheinend verwende ich den fstream falsch, da sich die Informationen welche ich Eingebe nach dem schließen des Programms nicht spiechern, könnt ihr mir sagen wo mein Fehler liegt?

    Main.cpp

    #include "Person.h"
    
    void clearInputPuffer();
    void DisplayPerson(Person&);
    void InputPerson(Person&);
    
    int main()
    {
    	Person Max("", "", "");
    	DisplayPerson(Max);
    	InputPerson(Max);
    	return 0;
    }
    
    void clearInputPuffer()
    {
    	cin.ignore();
    	cin.sync();
    	cin.clear();
    }
    
    void InputPerson(Person& p)
    {
    	string id;
    	string pw;
    	string text;
    	cout << "Id: ";
    	cin >> id;
    	clearInputPuffer();
    	cout << "Pw: ";
    	cin >> pw;
    	clearInputPuffer();
    	cout << "Text: ";
    	cin >> text;
    	clearInputPuffer();
    
    	p.setInfos(id, pw, text);
    }
    
    void DisplayPerson(Person& p )
    {
    	cout << "Person Id: " << p.getId() << endl;
    	cout << "Person Pw: " << p.getPw() << endl;
    	cout << "Person Text: " << p.getText() << endl;
    }
    
    #pragma once
    #include <string>
    #include <fstream>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    class Person
    {
    private:
    	string id;
    	string pw;
    	string text;
    public:
    	Person(string, string, string);
    	~Person();
    	void setInfos(string, string, string);
    	string getId();
    	string getPw();
    	string getText();
    };
    
    #include "Person.h"
    
    Person::Person(string _id, string _pw, string _text)
    {
    	id = _id;
    	pw = _pw;
    	text = _text;
    	string filename = "data.txt";
    	ifstream file(filename, ios::binary);
    	if (file)
    		file.read(reinterpret_cast<char*>(this), sizeof(this));
    	file.close();
    }
    
    void Person::setInfos(string _id, string _pw, string _text)
    {
    	id = _id;
    	pw = _pw;
    	text = _text;
    }
    
    string Person::getId() { return id; }
    string Person::getPw() { return pw; }
    string Person::getText() { return text; }
    
    Person::~Person()
    {
    	string filename = "data.txt";
    	ofstream file(filename, ios::binary);
    	file.clear();
    	file.write(reinterpret_cast<char*>(this), sizeof(this));
    	file.close();
    }
    


  • Mal davon abgesehen, dass ein Konstruktor, dem Werte übergeben werden, diese verwirft und stattdessen Daten aus einer Datei einliest, sehr zweifelhaft ist, benutzt du den Filestream in der Tat falsch. Wenn das Objekt nicht nur aus primitiven Datentypen besteht (int, float usw., Stichwort POD), musst du jede Membervariable einzeln schreiben und lesen (Stichwort serialisieren).


Log in to reply