web-dev-qa-db-fra.com

Ecriture de contenu stringstream dans ofstream

J'utilise actuellement std::ofstream comme suit:

std::ofstream outFile;
outFile.open(output_file);

Ensuite, j'essaie de passer un objet std::stringstream à outFile comme suit:

GetHolesResults(..., std::ofstream &outFile){
  float x = 1234;
  std::stringstream ss;
  ss << x << std::endl;
  outFile << ss;
}

Maintenant, ma outFile ne contient plus que des ordures: "0012E708" répété partout.

Dans GetHolesResults je peux écrire 

outFile << "Foo" << std:endl; 

et il sortira correctement dans outFile.

Une suggestion sur ce que je fais mal?

42
Eric

Vous pouvez le faire, ce qui n’a pas besoin de créer la chaîne. Il permet au flux de sortie de lire le contenu du flux sur le côté droit (utilisable avec n’importe quel flux).

outFile << ss.rdbuf();
74

Si vous utilisez std::ostringstream et vous demandez pourquoi rien n’est écrit avec ss.rdbuf(), utilisez la fonction .str().

outFile << oStream.str();
11
Digital_Reality

Lors du passage d'un rstream Streamd à un flux, les nouvelles lignes ne sont pas traduites. Le texte saisi pouvant contenir \n, la fonction de remplacement de la recherche ne fonctionnera pas. L'ancien code écrivait dans un fstream et le basculait en stringstream perd la traduction endl 

3
2ndshot