Textdatei lesen und Inhalt in MessageBox ausgeben



  • Ich habe das Problem, dass ich den Inhalt einer Textdatei in einer while-Schleife nicht auslesen kann. Es kommt immer folgender Fehler: "invalid operands of types `char[200]' and `const char[2]' to binary `operator&'". Hier der Code:

    char zeile[200];
           while (datei.getline(zeile, 200))
           {              
                 zeile += zeile & "\n"; //hier soll "zeile" eigentlich mit dem Inhalt der Textdatei gefüllt werden
           }
           MessageBox(hwnd, zeile, "Ausgabe der Textdatei", MB_OK);
    


  • Du weißt aber nicht wirklich was Du machst? Oder?

    Erstmal ließt du eine Zeile in den String 'zeile' ein und willst eine Zeichenkette aus 'char's mit dem Operator += verbinden? Das geht nur mit std::string. Außerdem, was nützt es dir wenn Du die eigelesene Zeile in 'zeile' hast und dann hinten dran nochmal die selbe Zeile anhängen.

    Lies dir bitte nochmal die Grundlagen durch...



  • #include <iterator>
    #include <string>
    #include <fstream>
    #include <iostream>
    
    #include <windows.h>
    
    int main()
    {
    	char const *  file_name { "foo.txt" };
    	std::ifstream file      { file_name };
    
    	if( !file.is_open() ) {
    
    		std::string error_msg{ "Failed to open \"" };
    		error_msg += file_name;
    		error_msg += "\"!";
    
    		MessageBoxA( GetConsoleWindow(), error_msg.c_str(), "Error:", MB_ICONEXCLAMATION );
    		return EXIT_FAILURE;
    	}
    
    	std::string file_content{ std::istreambuf_iterator< char >( file ),
    	                          std::istreambuf_iterator< char >() };
    
    	MessageBoxA( GetConsoleWindow(), file_content.c_str(), file_name, MB_OK );
    }
    


  • Danke ihr beiden. Das war sehr hilfreich. 🙂



  • Swordfish schrieb:

    /* ... */
    	
    	std::string file_content{ std::istreambuf_iterator< char >( file ),
    	                          std::istreambuf_iterator< char >() };
    
    /* ... */
    

    wahrscheinlich ist

    /* ... */
    
    	std::string file_content;
    	file.seekg( 0, std::ios::end );
    	file_content.resize( file.tellg() );
    	file.seekg( 0, std::ios::beg );
    	file.read( &file_content[ 0 ], file_content.size() );
    
    /* ... */
    

    schneller.


Anmelden zum Antworten