C ++ предлагает новую линию - PullRequest
2 голосов
/ 15 июня 2011

Я пытаюсь создать новую строку в ofstream, но она не работает. Все написано в одной строке в OUTPUT.txt

std::ofstream output;
output.open("OUTPUT.TXT");
output << "sometext" << "\r\n" << "sometext" << "\r\n" << "sometext";
output.close();

я тоже пробовал

output << "sometext" << std::endl << "sometext" << std::endl << "sometext";

и

output << "sometext" << "\n" << "sometext" << "\n" << "sometext";

и

output << "sometext" << '\n' << "sometext" << '\n' << "sometext";

Все было написано в одной строке, никаких новых строк ... Я что-то упустил?

Ответы [ 4 ]

2 голосов
/ 15 июня 2011

Если вы используете Cygwin g ++, у него были некоторые проблемы с преобразованием "\ n" в CRLF в стиле Windows при некоторых настройках , я попробовал простую версию вашего фрагмента, и она работала нормально.Попробуйте открыть в другом текстовом редакторе и посмотрите, сохраняется ли проблема.

0 голосов
/ 05 марта 2014

use

output.open("OUTPUT.TXT", ios::out);

Напоминаем, что ios::binary не может быть использовано.

0 голосов
/ 15 июня 2011

В таких случаях я считаю, что лучше всего смотреть на файл в шестнадцатеричном редакторе, а не в текстовом редакторе, который может иметь свои собственные идеи о том, как отображать текст, он также может быть полезен для поиска надоедливых непечатных символов, может сбить вас с толку.

Вы не сказали, на какой платформе вы работаете, но если вы работаете в Windows, я бы порекомендовал использовать HxD .

Если вы используете Windows, вы увидите что-то вроде этого:

Offset(h) 00       04       08       0C       10       14       18       1C

00000000  736F6D65 74657874 0D0A736F 6D657465 78740D0A 736F6D65 74657874 0D0A      sometext..sometext..sometext..

Шестнадцатеричная последовательность 0D0A - это символ '\ n' в Windows в приведенном выше примере.

0 голосов
/ 15 июня 2011

Возможно.Вы читаете копию файла, отличную от той, в которую пишет ваша программа.Удалите файл, затем запустите вашу программу.

...