Ответ 1
Вы можете сделать это, что не нужно создавать строку. Это делает поток вывода считывает содержимое потока с правой стороны (можно использовать с любыми потоками).
outFile << ss.rdbuf();
В настоящее время я использую 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
.
Любое предложение о том, что я делаю неправильно?
Вы можете сделать это, что не нужно создавать строку. Это делает поток вывода считывает содержимое потока с правой стороны (можно использовать с любыми потоками).
outFile << ss.rdbuf();
Если вы используете std::ostringstream
и задаетесь вопросом, почему ничего не написано с помощью ss.rdbuf()
, используйте функцию .str()
.
outFile << oStream.str();
При передаче строкового потока rdbuf в поток новые строки не переводятся. Текст ввода может содержать \n
, поэтому find replace не будет работать. Старый код написал в fstream и переключил его на stringstream, потерял перевод endl.
Я бы лучше написал ss.str();
вместо ss.rdbuf();
(и использовать поток строк).
Если вы используете ss.rdbuf()
форматные флаги outFile
будут сброшены, и ваш код не будет использоваться повторно. GetHolesResults(..., std::ofstream &outFile)
есть вызывающая GetHolesResults(..., std::ofstream &outFile)
может захотеть написать что-то вроде этого, чтобы отобразить результат в таблице:
outFile << std::setw(12) << GetHolesResults ...
... и удивляюсь, почему ширина игнорируется.