daten ändern und speichern...



  • Kommt drauf an was die Variable is, bei built-ins binär...



  • future-one schrieb:

    hallo...
    mal ne frage wie speicher ich ne variable die ich im programm verändert habe am besten in einer externen datei...
    gruß Marcel

    #include <fstream>
    

    damit du weißt nach was du suchen kannst 🙂



  • danke erstmal lese erstmal die FAQs durch...



  • struct ANSAGE
    {
        string eingabe;
    
    };
    
    void ansage_ml()
    {
    	ANSAGE ansage1;
    	fstream File("ansage.dat", ios::out|ios::binary);
    
    	cout<<"Ansage: ";
    	cin>>ansage1.eingabe;
    	//cout<<ansage1.eingabe;
    
    File.write((const char*)&ansage1, sizeof(ansage1));
    File.close();
    
    //File.open("ansage.dat", ios::in|ios::binary);
    //cout<<"Ansage: "<<ansage_eingabe<<endl;
    }
    
    void ansage_ausgabe()
    {
    	ANSAGE ansage1;
    	fstream File("ansage.dat", ios::out|ios::binary);
    	File.open("ansage.dat", ios::in|ios::binary);
    	 File.read((char*)&ansage1, sizeof(ansage1));
    
    	cout<<"Ansage: "<<ansage1.eingabe<<endl;
    }
    

    was stimmt da nich wieso gibt er in der 2ten funktion den text von der datei nihct aus??



  • future-one schrieb:

    void ansage_ausgabe()
    {
    	ANSAGE ansage1;
    	fstream File("ansage.dat", ios::out|ios::binary);
    	File.open("ansage.dat", ios::in|ios::binary); //muss hier nicht ios::out hin?
    	 File.read((char*)&ansage1, sizeof(ansage1));
    
    	cout<<"Ansage: "<<ansage1.eingabe<<endl;
    }
    

    was stimmt da nich wieso gibt er in der 2ten funktion den text von der datei nihct aus??



  • Ixtana schrieb:

    future-one schrieb:

    void ansage_ausgabe()
    {
    	ANSAGE ansage1;
    	fstream File("ansage.dat", ios::out|ios::binary);
    	File.open("ansage.dat", ios::in|ios::binary); //muss hier nicht ios::out hin?
    	 File.read((char*)&ansage1, sizeof(ansage1));
    
    	cout<<"Ansage: "<<ansage1.eingabe<<endl;
    }
    

    was stimmt da nich wieso gibt er in der 2ten funktion den text von der datei nihct aus??

    bewirkt nichts...
    mir ist auf gefallen bei der ersten funktion wird was in die datei geschreiben "is klar" bei auf ruf der 2ten wird der inhalt gelöscht why???



  • fstream File("ansage.dat", ios::out|ios::binary);
        File.open("ansage.dat", ios::in|ios::binary);
    

    AFAIK liegt hier der Fehler. Du öffnest mit einem filestream eine Datei zweimal, ohne sie zwischendurch zu schliesen.
    Also entweder:

    fstream file("ansagen.dat", ios::out | ios::in | ios::binary);
    // do something...
    file.close();
    file.open("ansagen2.dat", ios::out | ios::in | ios::binary)
    

    oder

    fstream file("ansagen.dat", ios::out | ios::in | ios::binary);
    // jetzt damit arbeiten
    

    In deinem Fall ist die zweite Variante günstiger. Denn warum willst du ein und diesselbe Datei zweimal hintereinander öffnen?

    Caipi



  • struct ANSAGE
    {
        string eingabe;
    
    };
    
    void ansage_MarcelLiedtke()
    {
    	ANSAGE ansage1;
    	fstream File("ansage.dat", ios::out|ios::binary);
    
    	cout<<"Ansage: ";
    	cin>>ansage1.eingabe;
    
    File.write((const char*)&ansage1, sizeof(ansage1));
    File.close();
    
    }
    
    void ansage_ausgabe()
    {
    	ANSAGE ansage1;
    	fstream File("ansage.dat", ios::out|ios::binary);
    
    	 File.read((char*)&ansage1, sizeof(ansage1));
    
    	cout<<"Ansage: "<<ansage1.eingabe<<endl;
    }
    

    so???



  • Schon eher ;). Erst musst du wissen was du willst.
    Willst du aus der Datei lesen oder in die Datei schreiben, oder beides?
    Wenn du aus der Datei lesen (im Binärmodus) willst, muss sie bereits existieren, deswegen dann so:

    // Z.B.:
    std::fstream infile("datei.txt", ios::in | ios::binary); // Datei im Binärmodus zum lesen öffnen.
    

    Das ist äquivalent zu

    std::ifstream infile("datei.txt", ios::binary); // Datei im Binärmodus zum lesen öffnen.
    

    Wenn du eine Datei dagegen zum schreiben (im Binärmodus) öffnen willst, schreibst du:

    std::fstream outfile("datei.txt", ios::out | ios::binary); // Datei im Binärmodus zum schreiben öffnen.
    

    Diese muss nicht existieren (Wenn doch, wird sie überschrieben). Dies ist wiederum äquivalent zu

    std::ofstream outfile("datei.txt", ios::binary); // Datei im Binärmodus zum schreiben öffnen.
    

    Und zu guter letzt wenn du eine Datei zum lesen und schreiben (im Binärmodus) öffnen willst, schreibst du:

    std::fstream inoutfile("datei.txt", ios::in | ios::out | ios::binary); // Datei im Binärmodus zum lesen und schreiben öffnen.
    

    //Edit: Noch ein Wort zum Binärmodus (der Vollständigkeit halber; Kopiert aus einem vorigen post von mir)

    C++ lernen und professionell anwenden schrieb:

    Standardmäßog wird eine Datei als Textdatei im sog. Textmodus geöffnet. Beim Lesen bzw. Schreiben einer Textdatei werden Steuerzeichen zum Kennzeichnen eines Zeilenwechsels oder des Dateiendes gesondert interpretiert und an das jeweilige Betriebssystem angepaßt. (sog. "Cooked Modus"). Bei einer im Binärmodus geöffneten Datei werden alle Bytes ohne jede Veränderung übertragen (sog. "RawModus").

    Caipi



  • das klapp!! juhu aber nur mit char!!! wieso geht string net sry wenn ich nerve...



  • Also die Methode read(const char* buffer, int num) liest eine num Bytes in buffer.
    Die Adresse des Speicherbereiches muss in den Typ char* gecastet werden.

    Eine Andere Möglichkeit Zeichen in einen String einzulesen ist mit getline(filestream, str). (Diese Möglichkeit liest immer eine Zeile in den String, egal wie lang).

    Caipi



  • okay ich habe des jetzt mit einem array gelöst aber wenn ich bei string ein leerzeichen ein gebe bricht er einfach ab....Why???


Anmelden zum Antworten