我目前正在使用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
中正确输出。
有关我做错的任何建议吗?
答案 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 ...
...想知道为什么忽略宽度。