kann man auch structs/klassen speichern?



  • hintergedanke ist, das ich viele einstellungen in meinem programm habe, die nicht klartext in einer ini datei landen sollen. in java hab ich einfach ein object serialisiert, die daten reingepackt und in die datei geschrieben, nur wie geht das in c++?

    danke schonma



  • mir ist nicht ganz klar was du vorhast

    aber du könntest es doch über die registry machen oder die datei codieren!



  • hm z.b. hat mein programm ein settings dialog, da stehen sachen drin wo man nur erreicht, wenn man sich eingeloggt hat, die muß ich jetzt so speichern das sie nicht lesbar sind.
    wonach muß ich denn suchen in der msdn wenn ich codieren will?



  • ich glaube da findest du so etwas was ich meinte nicht. ich habe mich wohl ein bisschen unklar ausgedrückt.

    ich meinte du c"odierst" sie einfach selber: nehmen an, du speicherst die zahl 10. dann überlegst du dir einen schlüssel. z.b.: *10+5. und um sie zu "decodieren" einfach /10-5. Du kannst dir natürlich was komplexeres einfallen lassen. man kann sich auch einen schlüssel für den schlüssel überlegen. oder zur laufzeit immer einen neuen schlüssel machen, oder vom benutzer einen eingeben lassen, wie auch immer....

    das wurde z.b. beim reg. code von ms office 97 gemacht. dort muss der code durch 7 teilbar sein



  • Hi!

    #include <fstream>
    #include <iostream>
    
    class foo
    {
    	public:
    		foo() : m_bar(0), m_fubar(0) { }
    		foo(int bar, double fubar) : m_bar(bar), m_fubar(fubar) {};
    
    		int get_bar()
    		{
    			return m_bar;
    		}
    
    		double get_fubar()
    		{
    			return m_fubar;
    		}
    
    	private:
    		int m_bar;
    		double m_fubar;
    };
    
    int main()
    {
    	// objekt anlegen
    	foo dummy(10, 3.14159);
    	std::cout << "foo.bar = " << dummy.get_bar() << std::endl
    		<< "foo.fubar = " << dummy.get_fubar() << std::endl;
    
    	// ausgabe in datei
    	std::ofstream out("dummy.dump", std::ios::binary);
    	out.write(reinterpret_cast<char*>(&dummy), sizeof(foo));
    	out.close();
    	// und wieder einlesen
    	std::ifstream in("dummy.dump", std::ios::binary);
    	foo anotherdummy;
    	in.read(reinterpret_cast<char*>(&anotherdummy), sizeof(foo));
    
    	std::cout << "anotherdummy.bar = " << anotherdummy.get_bar() << std::endl
    		<< "anotherdummy.fubar = " << anotherdummy.get_fubar() << std:: endl;
    }
    

    So geht das in etwa. Aber portabel ist das nicht, weil die verschiedenen Betriebssysteme/Compiler/Rechnerarchitekturen die Datentypen unterschiedlich verarbeiten. Ich würde vorschlagen, den Operator << zu überladen und die Variablen von Hand zu serialisieren. Besser ists noch, wenn du alles im XML-Format speicherst.



  • Hallo,

    welchen Compiler verwendest Du ? Eventuell wird das was Du suchst direckt vom Compiler untersützt.



  • danke schonma für die vorschläge
    also ich verwende visual c++ 6 und es sollte am ende auf windows rechnern laufen, also linux ist nichtmal in ferner zukunft geplant 🙂

    xml format ist aber wie gesagt nicht der hit, da es ja dann im klartext lesbar ist und auch änderbar...


Anmelden zum Antworten