Datei lesen problem



  • SeppJ schrieb:

    1. Du speicherst deine Zeilen in einem lokalen vector, der existiert nach Funktionsende nicht mehr. ➡ Referenzen
    2. Die Einleselogik ist verquer. Was, wenn das getline ein eof erzeugt, weil das Dateiende erreicht wird? Dann speicherst du Müll ab, weil du erst nach dem Speichern auf Fehler prüfst. Warum eigentlich nur eof und nicht alles andere, wenn es die Fehlerprüfung auf alles zum Preis von einem gibt? ➡ while(lesen) verarbeiten;

    1.Ah verdammt!Danke sehr das war es natürlich.
    2.Das Überprüfen auf Fehler und ob die Datei überhaupt vorhanden ist etc.. war erst mein nächster Schritt.
    3.Statt eof was sollte ich da nehmen?Sehen wie groß die Datei ist und dann anhand der Größe einlesen ?Oder gibts da besseres ?



  • 7xCore schrieb:

    3.Statt eof was sollte ich da nehmen?Sehen wie groß die Datei ist und dann anhand der Größe einlesen ?Oder gibts da besseres ?

    while ( !file.eof () ) {
            std::getline(file,file_line);
            file_content.push_back(file_line);
        }
    

    ->

    while ( std::getline(file,file_line) ) 
            file_content.push_back(file_line);
    

    Sobald das Lesen fehlschlägt biste ja am Ende der Datei.



  • Würde auch

    while(file) {
    ...
    }
    

    gehen ?


  • Mod

    7xCore schrieb:

    Würde auch

    while(file) {
    ...
    }
    

    gehen ?

    Kommt drauf an, was ... genau ist. Ich wette du planst da etwas, was keinen Sinn macht.



  • Da hast du recht!
    Ich wollte das ganz so machen, um zu überprüfen ob die datei vorhanden ist :

    std::fstream file....;
    
    if(file) {
    while(.....
    
    ..}
    }
    else {std::cerr << "Unable to open file" << std::endl;}
    


  • Nimmst du file.is_open()



  • out schrieb:

    Nimmst du file.is_open()

    Wozu? Damit es laenger ist?



  • Kellerautomat schrieb:

    out schrieb:

    Nimmst du file.is_open()

    Wozu? Damit es laenger ist?

    Nö, weil is_open() immer funktioniert.



  • Und in welchem Fall tut das die Konvertierung zu bool nicht?



  • Kellerautomat schrieb:

    Und in welchem Fall tut das die Konvertierung zu bool nicht?

    Nein das meinte ich nicht. Ich meinte, dass if(file) nicht dazu gedacht ist, um zu prüfen, ob eine file nun mit einer Datei verbunden ist, oder nicht.

    int main()
    {
    	std::fstream file;
    	if(file)
    	{
    		std::cout << "ok";
    	}
    	else
    	{
    		std::cerr << "Unable to open file" << std::endl;
    	}
    }
    

    Oder auch

    int main()
    {
    	std::fstream file("test.txt");
    	if(file)
    	{
    		std::cout << "ok";
    	}
    	else
    	{
    		std::cerr << "Unable to open file" << std::endl;
    	}
    
    	file.close();
    
    	if(file)
    	{
    		std::cout << "ok";
    	}
    	else
    	{
    		std::cerr << "Unable to open file" << std::endl;
    	}
    }
    

    Nennt sich ja auch nicht umsonst is_open() . 🤡



  • is_open(); brauch ich aber nicht, das ganze ist ja innerhalb eines Scopes gehalten und wird auch nur einmal gebraucht.


Anmelden zum Antworten