将串流内容写入流中

时间:2008-11-27 21:56:06

标签: c++ stl parameters stringstream ofstream

我目前正在使用std::ofstream,如下所示:

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

然后我尝试将std::stringstream对象传递给outFile,如下所示:

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

现在我的outFile只包含垃圾:“0012E708”全部重复。

GetHolesResults我可以写

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

,它将在outFile中正确输出。

有关我做错的任何建议吗?

4 个答案:

答案 0 :(得分:77)

您可以这样做,不需要创建字符串。它使输出流在右侧读出流的内容(可与任何流一起使用)。

outFile << ss.rdbuf();

答案 1 :(得分:12)

如果您使用的是std::ostringstream,并想知道为什么没有使用ss.rdbuf()编写任何内容,请使用.str()函数。

outFile << oStream.str();

答案 2 :(得分:3)

将字符串流rdbuf传递给流时,不会翻译换行符。输入文本可以包含\n,因此查找替换将不起作用。旧代码写入fstream并将其切换到字符串流会丢失endl转换。

答案 3 :(得分:0)

我宁愿写ss.str();而不是ss.rdbuf();(并使用stringstream)。

如果您使用ss.rdbuf(),则outFile的格式标志将被重置,从而使代码不可重用。 也就是说,GetHolesResults(..., std::ofstream &outFile)的调用者可能想要编写如下内容以将结果显示在表中:

outFile << std::setw(12) << GetHolesResults ...

...想知道为什么忽略宽度。