Daten sicher Schreiben bzw lesen



  • Hallo!

    in meinem Programm habe ich zwei Methoden; eine save() soll die Daten
    in einer Datei schreiben und die andere laden() Kann die Daten einfach
    wieder lesen. meine Frage ist wie kann ich nun die beiden Methoden
    ändern, damit ich sicher davon ausgehe,dass die Daten richtig
    geschrieben bzw geladen sind.

    Hier sind Abschitt von meinem code:
    data.h

    class DATA{
    
     private:
    
       int dmin,fmas;
       int dmax;
       int Dmun;
    
    public:
    
      DATA(int a,int b, int c, int d,int e);
      void setvalue();     
       void save (); 
       void load ();
    

    Data.cpp

    void DATA::save(){
    
      std::string fname;
      cout<<"filname eingeben"<<endl;
      cin >> fname;
    
      ofstream outf;
      outf.open( fname.data()); 
      if( !out ) {
        cout << "Datei " << fname << "konnte nicht geöffnet werden" << endl;}
    
      out <<dmin;
       out<<dmax;
       out <<fmas;
        out <<dmun;
    
      outf.close();
    
    }
    
    void DATA::load(){
    
       std::string lf;                    
      cout << "Dateiname  eingeben: " << endl;
      cin >> lf;  
      ifstream inf;
       inf.open(lf.data() );              
      if( !inf ) {
        cout << "Datei " << lf << " konnte nicht geöffnet werden" << endl;
      }
    
        inf >> dmin;
        inf >>dmax;
        inf >> fmas;
        inf >>dmun;
    
        inf.close(); 
       }
    

    Danke schönmal im Voraus

    Gruß
    mami



  • Schreib mir 'ne Mail mit den Anforderungen.


  • Mod

    void DATA::save(){
    
      std::string fname;
      cout<<"filname eingeben"<<endl;
      cin >> fname;
    
      ofstream outf(fname.c_str()); // data() ist nicht unbedingt nullterminiert!
      if( !outf ) {
        cout << "Datei " << fname << "konnte nicht geöffnet werden" << endl;}
    
      outf << dmin;
      outf << dmax;
      outf << fmas;
      outf << dmun;
    
      if (!outf) throw std::runtime_error("Fehler beim Schreiben!");
    }
    
    void DATA::load(){
    
      std::string lf;                    
      cout << "Dateiname  eingeben: " << endl;
      cin >> lf;  
      ifstream inf(lf.c_str());              
      if( !inf ) {
        cout << "Datei " << lf << " konnte nicht geöffnet werden" << endl;
      }
    
        inf >> dmin;
        inf >> dmax;
        inf >> fmas;
        inf >> dmun;
    
       if (!inf) throw std::runtime_error("Lesefehler!");
       }
    


  • Danke sehr Seppj!

    aber ich möchte eigentlich das das Programm im schleife bleibt wenn es die Daten nicht richtig geschreiben bzw geladen sind oder wenn ich falche Dateiname eingebe, daher habe ich folgendes versucht:

    void DATA::save(){
    ofstream  outf;
    
          do{
    std::string fname; 
     cout<<"filname eingeben"<<endl; 
    cin >> fname; 
    
     ofstream  outf (fname.c_str());
     if( !outf ) { 
     cout << "Datei " << fname << "konnte nicht geöffnet werden" << endl;} 
    
      outf << dmin;  
      outf << dmax; 
      outf << fmas; 
       outf << dmun; 
    
      if (!outf) throw std::runtime_error("Fehler beim Schreiben!"); 
    
          }while(!outf);
    }
    
    void DATA::load(){
          do{
    ifstream  inf;  
    std::string lf; 
      cout << "Dateiname  eingeben: " << endl; 
    
      cin >> lf; 
      ifstream  inf(lf.c_str()); 
       if( !inf ) { 
       cout << "Datei " << lf << " konnte nicht geöffnet werden" << endl; 
     } 
    
        inf >> dmin; 
        inf >> dmax; 
        inf >> fmas; 
       inf >> dmun; 
    
        if (!inf) throw std::runtime_error("Lesefehler!"); 
        cout <<" richtige Dateiname eigeben";
    
     }while(!inf);
    
    }
    

    aber soblad ich flche Dateiname eingabe,schmeißt mich std::runtime_error raus und bricht das prgramm.


  • Mod

    Dann schmeiß eben keine Exception, sondern mach das was du willst. Es ging mir nur da drum zu zeigen, wie man erfolgreiches Lesen/Schreiben prüfen kann (und ein paar deiner schlimmeren Fehler auszubessern).

    Wenn du nicht in der Lage bist, ein Programm so abzuändern, solltest du vielleicht noch einmal die ersten paar Kapitel in deinem Lehrbuch über Kontrollstrukturen durchlesen. Das sind so wichtige Grundlagen, das musst du selber können und nicht in einem Forenbeitrag vorgesetzt bekommen. Sonst bist du wortwörtlich bei der nächsten Funktion in deinem Programm schon wieder hier und völlig ratlos.

    edit: Und wiederhol auch Grundlagen zu Variablen und Gültigkeitsbereichen. Wenn du in so wenigen Zeilen so viele Fehler machst, solltest du vielleicht sogar noch einmal ganz von vorne anfangen. Da fehlt nämlich sehr viel Basiswissen, welches du brauchst, um überhaupt irgendetwas zu machen und um dich wweiter verbessern zu können. Womit lernst du C++?



  • du hast vollkommen recht, ich bin neulinge in c++ und habe ein Buch c++ von A bis z.
    Danke schönmal für deine tipps



  • mami schrieb:

    du hast vollkommen recht, ich bin neulinge in c++ und habe ein Buch c++ von A bis z.
    Danke schönmal für deine tipps

    aber nicht von einem gewissen J.W.??
    weil der produziert keine c++ bücher, sondern so eine schlechte art klopapier


  • Mod

    mami schrieb:

    und habe ein Buch c++ von A bis z.

    Wieso bin ich nicht überrascht?
    http://www.c-plusplus.net/forum/272350
    http://www.c-plusplus.net/forum/291152


Anmelden zum Antworten