std::getline mit wchar_t will net, sowie Zeile-Leer-Abfrage



  • Hallo zusammen,

    ich lade mittels des Codes aus dem Artikel "Ströme und Dateien in C++" die Zeilen einer Datei in einen Vector.

    Nun möchte ich den Text der einzelnen Zeilen in einen Dialog einsetzen. Dieser benötigt aber LPWSTR. Ich habe das ganze aber in strings drinnen. Nun klappt das umwandeln nicht.

    Ich wollte zuerst von string auf std::basic_string<wchar_t> umsteigen, aber dann funktioniert anscheinend das getline nicht mehr 😞 .

    Hier mal der Code:

    static std::vector<std::string> Contents; // Container für die einzelnen Zeilen
    
    std::ifstream FileIn("fragen.txt"); 
    			if (FileIn)     // Falls FileIn gültig ist. 
    			{ 
    				// Solange kein Fehler auftritt und nicht eof 
    				for(std::string ReadString; std::getline(FileIn, ReadString);)
    				{
    					Contents.push_back(ReadString);   // Aktuelle Zeile in den Vektor einfügen 
    				} 
    			}
    
    			SetDlgItemText(hwnd, IDC_FRAGE, Contents.at(1).c_str()/* DAS HIER KLAPPT NICHT, DA ICH LPWSTR BRAUCHE !!! */);
    

    Und außerdem würde ich noch gerne beim Einlesen der Zeilen eine Abfrage einschalten, ob die Zeile leer ist und wenn ja, soll sie nicht in den Vector. Leider hat auch dies nicht geklappt.

    Könnte mir dafür auch noch jemand einen Tipp geben? Danke!



  • Wenn du auf wchar_t-Arbeit umschalten willst, mußt du das für alle Klassen machen. Das bedeutet, du mußt sowohl die Stringklasse (wstring aka basic_string<wchar_t>) als auch den Filestream (wifstream) austauschen - eine Mischung aus char- und wchar_t-Klassen arbeitet nicht besonders gut zusammen.

    PS: Ob die Zeile leer ist, kannst du mit line.empty() abfragen.



  • hmm hab ihm die Lösung in nem anderen Forum schongesagt gehabt .. sollte eigentlich nicht mehr bestehen(das Problem) ..



  • @CStoll: Was ist 'line' (von welcher Klasse ist das ein Objekt)?



  • "line" wäre in deinem Fall "ReadString", ein String-Objekt.



  • Danke!!!


Anmelden zum Antworten