ofstreamへの文字列ストリームコンテンツの書き込み
-
11-07-2019 - |
質問
現在、次のように 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
にはゴミのみが含まれています:&quot; 0012E708&quot;繰り返しました。
GetHolesResults
で記述できます
outFile << "Foo" << std:endl;
そして outFile
で正しく出力されます。
間違っていることについて何か提案はありますか?
解決
これを行うことができますが、文字列を作成する必要はありません。出力ストリームに右側のストリームのコンテンツを読み取らせます(任意のストリームで使用可能)。
outFile << ss.rdbuf();
他のヒント
std :: ostringstream
を使用していて、 ss.rdbuf()
で何も書き込まれないのではないかと考えている場合は、 .str()
を使用します関数。
outFile << oStream.str();
stringstream rdbufをストリームに渡すと、改行は翻訳されません。入力テキストには \ n
を含めることができるため、検索置換は機能しません。古いコードはfstreamに書き込み、それをstringstreamに切り替えるとendl変換が失われます。
ss.rdbuf();
の代わりに ss.str();
と書きます(そして、文字列ストリームを使用します)。
ss.rdbuf()
を使用すると、 outFile
のformat-flagsがリセットされ、コードが再利用できなくなります。
つまり、 GetHolesResults(...、std :: ofstream&amp; outFile)
の呼び出し元は、結果をテーブルに表示するために次のようなものを書きたいかもしれません:
outFile << std::setw(12) << GetHolesResults ...
...そして、なぜ幅が無視されるのか疑問に思う。