Problem mit Struct in File speichern/lesen



  • #include <stdio>
    #include <iostream>
    #include <fstream>
    #include <vector>
    
    struct nub
    {    int a;
         double ax;
    };
    
    template <class T> class cFileSSaveRead
    {
        protected:
                bool binary;
                int grs;
    
                FILE *in;
                std::string filename;
    
                T *ptrStruct;
    
                bool fFileWrite(FILE *in,T *ptrS)
                {   if( (in = fopen(filename.c_str(),binary?"a+b":"a+t"))==NULL)
                        return false;
                    else
                    {   fwrite(&ptrS,grs,1,in);
                        fclose(in);
                        ptrStruct = ptrS;
                        return true;
                    }
                };
    
                bool fFileRead(FILE *in,std::vector<T> *avec)
                {   int a=0,b=1;
                    T buffer;
                    if( (in = fopen(filename.c_str(),binary?"a+b":"a+t"))==NULL)
                        return false;
                    else
                    {   rewind(in);
                        while(!a)
                        {   if(fread(&buffer,sizeof(T),1,in)!=1)
                               a=1;
                            else
                            {  avec->push_back(buffer);
                               b++;
                            }
                        }
                        fclose(in);
                        return true;
                    }
                };
    
        public :
                cFileSSaveRead(std::string FName,bool bin)  :
                                                         grs(sizeof(T)),
                                                         filename(FName),
                                                         binary(bin)
                {
                };
    
               ~cFileSSaveRead()
                {
                };
    
                InDateiSchreiben(T *ptr)
                {   fFileWrite(in,ptr);
                };
    
                LeseDatei(std::vector<T> *a)
                {   fFileRead(in,a);
                };
    };
    
    int main(int argc, char* argv[])
    {       std::vector<nub> b;
            nub a;
            a.a=0;
            cFileSSaveRead<nub> *t = new cFileSSaveRead<nub>("C:\\chicken.txt",false);
            t->InDateiSchreiben(&a);
    
            t->InDateiSchreiben(&a);
            t->LeseDatei(&b);
            delete t;
            std::cout<<b.size()<<b[1].a;
            std::cin.get();
            return 0;
    }
    //---------------------------------------------------------------------------
    

    vielleicht kann mir einer ja helfen ... 😞 weil ich seh eigentlich kein fehler .. 😞



  • Darkling schrieb:

    vielleicht kann mir einer ja helfen ... 😞 weil ich seh eigentlich kein fehler .. 😞

    Weder "ich seh da keinen Fehler" noch "vielleicht kann mir ja einer helfen" sind gültige Fehlermeldungen bzw brauchbare Fehlerbeschreibungen.

    Da der (einzige) Hersteller für Kristallkugeln leider kürzlich eine Rückrufaktion sämtlicher Modelle gestartet hat, wird dir hier - ohne brauchbaren Problembeschrieb - daher auch kaum jemand helfen können.

    -junix



  • Was geht denn nicht?

    Egal, ich würde sowieso >> und << für nub überschreiben und
    dann mit nem FileStream lesen und schreiben.

    Jockel



  • junix :es gibt ja auch keine fehlermeldung beim übersetzen ..

    das problem ist eigentlich sollte er ja die struct 2x schreiben und dann auslesen in den vector .. und dann die zahl der 2. struct ausgeben ..

    beim ausgeben der zahl kommt müll raus .. jedoch weiss ich nicht direkt an welcher stelle des schreib und lesevorgangs der fehler passiert.



  • Darkling schrieb:

    junix :es gibt ja auch keine fehlermeldung beim übersetzen ..

    a) Seit wann können Fehlermeldungen nur beim Übersetzen auftreten?
    b) Habe ich ausdrücklich Fehlermeldung/-beschreibung geschrieben.

    Darkling schrieb:

    das problem ist [...]

    Wieso nicht gleich im ersten Post so?

    Weisst du wie die Lösung für dein Problem lautet?**
    Debugger benutzen** und dein Programm mal kräftig Debuggen. Ich seh da vom Schiff aus drei bis fünf fehler die du machst. Zum Teil Anwendungsfehler deiner eigenen Klasse zum Teil aber auch Logikfehler innerhalb deiner KLasse.

    -junix



  • junix schrieb:

    Ich seh da vom Schiff aus drei bis fünf fehler die du machst. Zum Teil Anwendungsfehler deiner eigenen Klasse zum Teil aber auch Logikfehler innerhalb deiner KLasse.

    -junix

    dann könntest du mir ja mal weiterhelfen bitte.



  • Faultier... benutze erst mal deinen Debugger und überprüfe mal ob das Programm überhaupt das macht was du dir da vorstellst. In 9 Minuten hast du diesen Arbeitsgang bestimmt noch nicht abgeschlossen. (vermutlich noch nicht mal angefangen.)

    -junix



  • junix schrieb:

    Ich seh da vom Schiff aus drei bis fünf fehler die du machst. Zum Teil Anwendungsfehler deiner eigenen Klasse zum Teil aber auch Logikfehler innerhalb deiner KLasse.

    -junix

    also ich hab den fehler nu wenn man aus &ptrS => ptrS macht gehts ... aber nu will ich doch mal die 3-5 andren fehler wissen



  • Siehste geht doch... nur war hald n bischen eigene Arbeit gefordert statt Foren-jammerei.

    Weitere Fehler?

    • Hinweis für einen weiteren Fehler: Du schreibst binäre Daten...
    • Ausserdem ist es mindestens unschön, wenn man aus einer Datei liest, sie aber nicht explizit fürs Lesen öffnet.
    • C99-Konfrom ist das Teil auch nicht.
    • Für Flags die sowieso nur zwischen 1 und 0 wechseln kann und sollte man auch eher bool verwenden.
    • Sinnvolle Variablenbezeichnungen wären wohl auch kein Fehler (a, b, t, was sagt das schon aus?)
    • Kommentiert ist auch nix
    • ...da gäbs bestimmt noch mehr... hab nur grad keine Lust mich näher damit auseinander zu setzen.

    -junix



  • InDateiSchreiben und
    LeseDatei
    haben ausserdem kein "return" ..

    und <stdio> wird bei mir weder gefunden noch benoetigt...



  • Ich habs immer noch nicht verstanden 😞 😞


Anmelden zum Antworten