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 ?
-
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 einefilenun 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.