2010-02-25 2 views
1

У меня проблема с моим выходом, когда я пишу в файл I, я получаю квадраты, когда я помещаю endl для изменения строк.Проблема с iostream, мой вывод endl - это квадраты littles

std::ofstream outfile (a_szFilename, std::ofstream::binary); 
outfile<<"["<<TEST<<"]"<<std::endl; 

Я получаю что-то вроде этого в своем файле, а остальные выходы не записываются на следующей строке, а на одном и том же.

[TEST]square 

По-видимому, я не могу написать квадрат здесь, но это что-то о том, что из потока является двоичным или что-то в этом роде?

+0

Позвольте мне сделать дикие догадки: вы работаете в Windows? Вы просматриваете файл в «Блокноте»? Попробуйте просмотреть его в Wordpad. –

+0

ну да, но его следует рассматривать в блокноте ... все остальные строки имеют строки в блокноте, когда у меня их нет, и мне нужно, чтобы они были. – DogDog

ответ

5

В этом случае вы не хотите открывать файл в двоичном режиме.

Попробуйте вместо этого:

std::ofstream outfile (a_szFilename); 
outfile<<"["<<TEST<<"]"<<std::endl; 
+2

Я не думаю, что это должно быть пропущено, это правильно. Отформатированный вывод и двоичный файл не совпадают. – GManNickG

3

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

Чтобы открыть вам файл в текстовом режиме просто не включают binary флага перевод будет сделан автоматически

std::ofstream outfile(a_szFilename); 
outfile<<"["<<TEST<<"]"<<std::endl; 
+0

Какой режим следует использовать? – DogDog

2

Возможно, это связано с тем, что вы находитесь в двоичном режиме, и концы строк ошибочны. std::endl разместит '\n' на потоке перед промывкой. В текстовом режиме это будет преобразовано в правильную строку, заканчивающуюся для вашей платформы. В двоичном режиме таких преобразований не происходит.

Если вы работаете в Windows, ваш код будет иметь линию (LF), но Windows также требует возврата каретки (CF), которая равна '\r'. То есть, он хочет «\ r \ n», а не только новую строку.

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

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