Kompletten Inhalt einer Datei in einen std::wstring schreiben



  • Abend,

    ich nehme wchar_t, weil meine Datei Umlaute enthält. Beispiel:

    Häuser
    öffentlich
    über
    

    Im Moment lese ich die komplette Datei Zeichen für Zeichen aus.

    #include <fstream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	wifstream file("test.txt",ios_base::binary);
    	wstring wstr;
    	for(wchar_t c; file>>noskipws>>c; wstr+=c);
    
    	// ...
    }
    

    Das zeichenweise Auslesen gefällt mir nicht. Darum dachte ich, ich versuches mit einem istream_iterator :

    #include <fstream>
    #include <string>
    #include <iterator>
    using namespace std;
    
    int main()
    {
    	wifstream file("test.txt",ios_base::binary);
    	istream_iterator<wchar_t> start(file); // Kein Konstruktor für wifstream
    }
    

    Allerdings fiel mir dann auf, dass es istream_iterator wchar_t nich unterstützt bzw. es einen wistream_iterator nicht gibt. Gibt es denn eine Lösung, damit man alles in einem Rutsch einlesen kann?

    Danke im Voraus



  • istream_iterator hat einen 2. Parameter für CharT des unterliegenden Streams. Also sollte istream_iterator<wchar_t, wchar_t> klappen.



  • ipsec schrieb:

    istream_iterator hat einen 2. Parameter für CharT des unterliegenden Streams. Also sollte istream_iterator<wchar_t, wchar_t> klappen.

    Ah, danke dir. 🙂

    Und hier noch die Lösung für diejenigen, die vielleicht mal auf dasselbe Problem stoßen:

    #include <fstream>
    #include <iterator>
    #include <string>
    
    int main()
    {
    	std::wifstream file("test.txt",std::ios_base::binary);
    
    	std::istream_iterator<wchar_t,wchar_t> begin(file>>std::noskipws);
    	std::istream_iterator<wchar_t,wchar_t> end;
    
    	std::wstring content(begin,end);
    }
    

Anmelden zum Antworten