fstream will beim dritten Mal nicht mehr!
-
Ach scheisse, steht eh im Titel. Naja egal...
-
hast ihm zum schluss nciht mehr gesagt ob es es öffnen zum lesen oder öffnen zum schreiben soll.
-
Aber std::fstream impliziert doch std::ios::in sowie std::ios::out, steht in meinem Buch.
MfG
-
Selbst, wenn ich beim letzten open std::ios::out angebe, steht kein "Herst" drin, die Datei wird nur mit nichts überschrieben.
MfG
-
Hast du geprüft ob sich der stream in einem Fehlerzustand befindet?
-
dataBaseFile.fail() == true
Aber erst direkt nach dem letzten open. Warum? Vorher wird auch alles korrekt ausgelesen.
MfG
-
Doch nicht nach dem letzten open sondern nach meinem Code...
dataBaseFile.open("Datenbank.db", std::ios::out | std::ios::app); dataBaseFile.close(); dataBaseFile.open("Datenbank.db", std::ios::in); for(; std::getline(dataBaseFile, rowHelper); ++numBannedPlayers) if(rowHelper.size() > 0 && numBannedPlayers < 4) SendMessage(editFieldHandles[numBannedPlayers], WM_SETTEXT, 0, reinterpret_cast<LPARAM>(rowHelper.c_str())); numBannedPlayers -= 3; // dataBaseFile.fail() == true dataBaseFile.close();
-
dataBaseFile.clear() nach dem Auslesen hat anscheinend geholfen...
-
Damit hast du das Symptom behoben aber nicht die Ursache heraus gefunden. Du solltest prüfen ob die zuvor eingelesenen Daten auch alle richtig eingelesen wurden, da es dort zu einem Fehler gekommen sein muss (und das failbit gesetzt wurde).
-
fail() ist nun nicht mehr true, nachdem ich clear() aufgerufen habe.
Es scheint nun alles zu funktionieren...MfG
-
Ja ist logisch das fail danach nicht mehr auf "false" steht ... du hast die States des Streams alle wieder auf die Default-Werte, durch die "Clean"-Funktion, zurückgesetzt!
-
Mhm, dachte ich mir. Aber es funktioniert trotzdem alles. Durch was kann das failbit entstanden sein? Ihr seht ja den Code...
MfG
-
std::getline(dataBaseFile, rowHelper)das hat es ausgelöst.
irgendwann erreichst du in deiner schleife das ende der datei, der stream versucht getline auszuführen-> das geht schief, und darüber wirst du dann informiert. Also kein Hexenwerk ;).
Diesen Umstand, dass das failbit gesetz wird nutzt du übrigens bereits in der for-schleife selbst aus, weil der rückgabewert von getline ein istream ist, der nach bool gecastet wird, und der ergibt nur dann false, wenn irgendwas schiefgelaufen ist.