Schreiben string Inhalt in ofstream
-
11-07-2019 - |
Frage
Ich bin derzeit std::ofstream
wie folgt:
std::ofstream outFile;
outFile.open(output_file);
Dann versuche ich, ein std::stringstream
Objekt outFile
passieren wie folgt:
GetHolesResults(..., std::ofstream &outFile){
float x = 1234;
std::stringstream ss;
ss << x << std::endl;
outFile << ss;
}
Nun mein outFile
enthält nichts anderes als Müll: "0012E708" all over wiederholt
In GetHolesResults
kann ich schreiben
outFile << "Foo" << std:endl;
und es wird korrekt ausgegeben in outFile
.
Jeder Vorschlag, auf das, was ich falsch mache?
Lösung
Sie können dies tun, das muss nicht die Zeichenfolge erstellen. Es macht den Ausgangsstrom den Inhalt des Stroms auf der rechten Seite ausgelesen (verwendbar mit beliebiger Streams).
outFile << ss.rdbuf();
Andere Tipps
Wenn Sie std::ostringstream
verwenden und fragen sich, warum nichts mit geschrieben werden ss.rdbuf()
dann .str()
Funktion verwenden.
outFile << oStream.str();
Wenn Sie eine string RDBUF in einen Stream newlines passieren, werden nicht übersetzt. Der eingegebene Text kann enthalten \n
finden so ersetzen wird nicht funktionieren. Der alte Code schrieb an einem fstream und es zu einem string Verluste der Endl Übersetzung wechseln.
Ich würde eher schreiben ss.str();
statt ss.rdbuf();
(und verwenden Sie einen string).
Wenn Sie ss.rdbuf()
die Format-Flags von outFile
verwenden wird zurückgesetzt, Ihren Code nicht wiederverwendbar zu machen.
Das heißt, kann der Anrufer von GetHolesResults(..., std::ofstream &outFile)
will, so etwas zu schreiben, das Ergebnis in einer Tabelle angezeigt werden:
outFile << std::setw(12) << GetHolesResults ...
... und frage mich, warum die Breite ignoriert wird.