2008-11-27 6 views
37

Я в настоящее время использую std::ofstream следующим образом:Написание stringstream содержания в 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.

Любое предложение о том, что я делаю неправильно?

+1

Я предлагаю вам перефразировать название на что-то в строке: «сочинительство содержание stringstream в ofstream» (или ostream для того, что имеет значение) – 2008-11-27 22:09:22

+1

Эрик, вы должны отметить ответ Йоханнеса, как принято, так что я могу удалить мой (что явно хуже его подхода) – 2013-07-19 16:30:07

+1

Хорошо, сделано. Но в те дни я использовал ваше решение =) – Eric 2013-07-19 16:32:46

ответ

67

Вы можете сделать это, что не требует создания строки. Это делает поток вывода считывает содержимое потока с правой стороны (можно использовать с любыми потоками).

outFile << ss.rdbuf(); 
3

При передаче строкового потока rdbuf в поток новые строки не переводятся. Текст ввода может содержать \n, так что найти замену не получится. Старый код написал в fstream и переключил его на stringstream, потерял перевод endl.

8

Если вы используете std::ostringstream и задаетесь вопросом, почему ничего не написано с помощью ss.rdbuf(), тогда используйте функцию .str().

outFile << oStream.str(); 

 Смежные вопросы

  • Нет связанных вопросов^_^