fstream, wie Daten wieder auslesen?



  • Hallo

    Ich habe mir jetzt mal volgendes Beispielprogramm angesehen:

    #include <iostream>
    #include <fstream>
    using namespace std; 
    
    int main()
    {
    // Einen Person-Datensatz definieren 
    struct PERSON 
    { 
        char VorName[20]; 
        char NachName[20]; 
        int TelNr; 
    }; 
    
    // fstream damit die Datei zuerst schreibend und dann lesend geöffnet werden kann. 
    fstream File("Person.dat", ios::out|ios::binary); 
    if (File.is_open()) 
    { 
        // Nur zwei Datensätze schreiben. 
        // Hier wäre eine Fehlerprüfung angebracht 
        for (int i = 0; i < 1 ; ++i) 
        { 
            PERSON Pers; 
            cout << "Vorname: "; 
            cin >> Pers.VorName; 
            cout << "Nachname: "; 
            cin >> Pers.NachName; 
            cout << "TelNr: "; 
            cin >> Pers.TelNr; 
    
            // Aktuelle Person in der Datei speichern. 
            File.write((const char*)&Pers, sizeof(Pers)); 
        } 
        File.close();   // Datei schließen 
    } 
    // Datei zum Lesen öffnen. 
    File.open("Person.dat", ios::in|ios::binary); 
    if (File.is_open()) 
    { 
        PERSON Pers; 
        while (File.read((char*)&Pers, sizeof(Pers))) 
            cout << Pers.VorName << " " << Pers.NachName << " " << Pers.TelNr << endl; 
    }
    return 0;
    }
    

    So, das Programm fragt die 3 Daten einmal ab, speichert sie dann in Person.dat und zeigt sie zum schluss noch mal an. Wenn ich das Programm jetzt schließe ist in dem Ordner auch eine Person.dat. Dort sind die Daten dochauch weiterhin gespeichert wenn ich das Programm schieße, oder?
    Und meine eigentliche Frage ist:
    Wie kann ich die Daten wieder auslesen nachdem ich das Programm geschlossen und wieder geöffnet habe? Angenommen man würde es so umschreiben das man am anfang auswählen könnte ob man die Daten eintragen oder lesen möchte. Wie würde dann der lesen teil aussehen? Hab ein bisschen mit dem Code oben herumexpirementiert, bin aber zu keinem zufriedenstellenden Ergebnis gekommen
    :(.

    mfg Frusciante



  • wenn du daten mit write in eine datei schreibst, musst du sie mit read wieder einlesen.
    schreibst du daten mit dem << operator, musst du sie mit dem >> operator wieder einlesen.

    du musst also zuerst wieder nen stream auf die datei öffnen, in die du geschrieben hast, und musst dann über

    File.read((char*)&Pers, sizeof(Pers));
    wieder einlesen(hoffe, ich vertue mich jetzt nicht)

    //edit das programm funktioniert doch.
    hast nur unten vergessen wieder auf ne eingabe zu warten,dann kannste das natürlich auch nich sehen^^


Anmelden zum Antworten