Escrevendo conteúdos stringstream em ofstream
-
11-07-2019 - |
Pergunta
Atualmente estou usando std::ofstream
da seguinte forma:
std::ofstream outFile;
outFile.open(output_file);
Então eu tentar passar um objeto std::stringstream
para outFile
da seguinte forma:
GetHolesResults(..., std::ofstream &outFile){
float x = 1234;
std::stringstream ss;
ss << x << std::endl;
outFile << ss;
}
Agora meu outFile
contém nada além de lixo: "0012E708" repetido em todo
Em GetHolesResults
eu posso escrever
outFile << "Foo" << std:endl;
e irá imprimir corretamente no outFile
.
Qualquer sugestão sobre o que estou fazendo de errado?
Solução
Você pode fazer isso, que não precisa criar a string. Isso torna o fluxo de saída ler o conteúdo do fluxo no lado direito (utilizável com qualquer streams).
outFile << ss.rdbuf();
Outras dicas
Se você estiver usando std::ostringstream
e se perguntando por que nada se escrito com ss.rdbuf()
em seguida, use a função .str()
.
outFile << oStream.str();
Ao passar um rdbuf stringstream para um fluxo de novas linhas não são traduzidos. O texto de entrada pode conter \n
assim que encontrar substituir não vai funcionar. O código antigo escreveu a um fstream e ligá-lo a uma perda stringstream a tradução endl.
Eu tinha ss.str();
em vez de gravação em vez de ss.rdbuf();
(e usar um stringstream).
Se você usar ss.rdbuf()
O formato com bandeiras de outFile
será reposto tornando o seu código não reutilizáveis.
Ou seja, o chamador de GetHolesResults(..., std::ofstream &outFile)
pode querer escrever algo como isto para exibir o resultado em uma tabela:
outFile << std::setw(12) << GetHolesResults ...
... e admira por isso que a largura é ignorado.