fstream



  • Hallo,

    ich habe ein kleines prob mit dem fstream....

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string var1,var2="Ein Test mehr nicht";
        fstream schreiben;
        schreiben.open("Test.txt", ios::in | ios::out | ios::trunc);
        schreiben<<var2;
        schreiben>>var1;
        cout<<"test:"<<var1<<endl;   
        schreiben.close();
        system("PAUSE");
        return EXIT_SUCCESS;
    };
    

    er erstellt die datei und schreibt hinein aber er ließt es nicht...
    kann mir da einer vll helfen? bitte 😃



  • Operator >> liest nur bis zum ersten Leerzeichen; nutz am besten std::getline() aus <string>



  • Gleichzeitig (bzw. kurz nacheinander) Schreiben und Lesen aus einer (gepufferten) Datei kann so nicht klappen.
    Um Daten wirklich in die Datei zu schreiben, gibt es die Methode flush().

    string var1,var2="Ein Test mehr nicht";
    fstream schreiben;
    schreiben.open("Test.txt", ios::in | ios::out | ios::trunc);
    schreiben<<var2;
    schreiben.flush(); // Daten nun aus dem interne Puffer in die Datei schreiben
    // schreiben>>var1; // liest nur "Ein" ein
    getline(f, var1); // liest komplette Zeile
    cout<<"test:"<<var1<<endl;
    schreiben.close();
    

    Ich weiß aber nicht genau, ob der Lesezeiger nach dem Schreiben am Anfang der Datei steht...
    Probiere es einfach mal aus oder aber du öffnest die Datei zuerst schreibend und anschließend nochmals nur lesend.



  • Ehm nein er muss wieder nach vorne seeken 😛 War auch mal dem Irrglauben verfallen ^^



  • wofür steht denn das "f" bei "getline(f, var1);" ??



  • Sorry, meinte natürlich

    getline(schreiben, var1); // liest komplette Zeile
    

    f sollte einfach die Variable für einen fstream sein...



  • mhh klappt leider immer noch nicht, ich habe das so eingesetzt wie du es geschrieben hast:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string var1,var2="Ein Test mehr nicht";
        fstream schreiben;
        schreiben.open("Test.txt", ios::in | ios::out | ios::trunc);
        schreiben<<var2;
        schreiben.flush();
        getline(schreiben,var1);
        cout<<"test:"<<var1<<endl;   
        schreiben.close();
        system("PAUSE");
        return EXIT_SUCCESS;
    };
    

    hilft aber trotzdem nicht...



  • Du mußt möglicherweise noch an den Dateianfang zurückspringen, bevor du etwas einlesen kannst ( schreiben.seekg(0); ).



  • #include <iostream>
    #include <fstream>
    #include <string>
    
    int main()
    {
        std::string read_string;
        const std::string write_string("Ein Test! Mehr nicht?");
    
        std::fstream file_stream("test.txt", std::ios::in | std::ios::out);
        file_stream << write_string << std::endl;
        file_stream.seekg(0, std::ios::beg);
        if (!(std::getline(file_stream, read_string))) { std::cerr << "FEHLER: Konnte Datei nicht lesen!" << std::endl; return 1; }
        std::cout << "Write: \"" << write_string << "\"\nRead: \"" << read_string << "\"" << std::endl;  
        std::cin.get();
    }
    

    ... und so sollte das gehen 🙂



  • Yop das wars 😃 danke an alle ^^



  • Hätte jetzt ne neue frage undzwar kann ich irgendwie die größe meiner "Test.txt" herraus bekommen, ich meine das so das wenn ich x Zeilen hinein geschrieben habe ich auch diese x Zeilen auslesen kann



  • Ehm naja du könntest, um die Zeilenanzahl herauszufinden in dem du einfach folgendes machst:

    std::size_t get_line_count(std::ifstream& file_stream)
    {
        const std::streampos pos(file_stream.tellg());
        std::size_t line_count(0);
        std::string tmp;
        while (std::getline(file_stream, tmp)) ++line_count;
        file_stream.seekg(pos, std::ios::beg);
        return line_count;
    }
    

    ... aber naja kannst auch einfach alles einlesen 😛 std::getline schlägt ja fehl, wenn nix mehr eingelesen werden kann ...


Anmelden zum Antworten