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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top