Escribir contenidos de cadena en ofstream
-
11-07-2019 - |
Pregunta
Actualmente estoy usando std :: ofstream
de la siguiente manera:
std::ofstream outFile;
outFile.open(output_file);
Luego intento pasar un objeto std :: stringstream
a outFile
de la siguiente manera:
GetHolesResults(..., std::ofstream &outFile){
float x = 1234;
std::stringstream ss;
ss << x << std::endl;
outFile << ss;
}
Ahora mi outFile
contiene nada más que basura: " 0012E708 " repetido por todas partes.
En GetHolesResults
puedo escribir
outFile << "Foo" << std:endl;
y saldrá correctamente en outFile
.
¿Alguna sugerencia sobre lo que estoy haciendo mal?
Solución
Puede hacer esto, que no necesita crear la cadena. Hace que la secuencia de salida lea el contenido de la secuencia en el lado derecho (utilizable con cualquier secuencia).
outFile << ss.rdbuf();
Otros consejos
Si está utilizando std :: ostringstream
y se pregunta por qué no se escribe nada con ss.rdbuf ()
, use .str ()
función.
outFile << oStream.str();
Al pasar una secuencia de cadena rdbuf a una secuencia, las nuevas líneas no se traducen. El texto de entrada puede contener \ n
, por lo que buscar reemplazar no funcionará. El antiguo código escribió en un flujo continuo y al cambiarlo a un flujo de cadena pierde la traducción final.
Prefiero escribir ss.str ();
en lugar de ss.rdbuf ();
(y usar un stringstream).
Si usa ss.rdbuf ()
, los indicadores de formato de outFile
se restablecerán y su código no será reutilizable.
Es decir, la persona que llama de GetHolesResults (..., std :: ofstream & amp; outFile)
podría querer escribir algo como esto para mostrar el resultado en una tabla:
outFile << std::setw(12) << GetHolesResults ...
... y me pregunto por qué se ignora el ancho.