C ++ в Windows Я не могу поместить символ Enter в файл .txt

Я создал программу, которая использует кодирование Хаффмана для сжатия и распаковки файлов .txt (ANSI, Unicode, UTF-8, Big Endian Unicode …).

При распаковке я беру символы из двоичного дерева и помещаю их в .txt в двоичном режиме:

Ofstream F;
F.open("example.txt", ios::binary);

Я должен написать в файл .txt в двоичный режим потому что мне нужно распаковать каждый тип .txt файла (не только ANSI), поэтому мои символы — это отдельные байты.

В Windows он помещает все символы, но не заботится о символе Enter!

Например, если у меня есть этот файл example.txt:

Hello
World!
=)

Я сжимаю его в файл example.dat и сохраняю дерево Хаффмана в другой файл (exampletree.dat).
Теперь для распаковки example.dat я беру символы из дерева, сохраненного в exampletree.dat, и помещаю их в новый файл .txt через put() или же fwrite(), но на Windows это будет так:

HelloWorld!=)

В Ubuntu он работает отлично и сохраняет также символ Enter!

Это не ошибка кода, потому что если я распечатываю в консоли распакованный файл .txt, он также печатает введенные символы! Так что есть проблема в Windows! Может ли кто-нибудь помочь мне?

0

Решение

Вы пытались открыть файл с помощью WordPad или любого другого расширенного текстового редактора (Notepad ++), который идентифицирует LF как символ новой строки. Блокнот редактора по умолчанию поместит его в одну строку, как вы описали.

Возможно, это не то решение, которое вы ищете. Но проблема, по-видимому, связана с тем, что вместо строки по умолчанию CR / LF используется LF в качестве разрыва строки.

0

Другие решения

Похоже, что это будет разница в обработке EndOfLine в Linux против Windows. EOL может быть просто «\ n» или «\ r \ n», т. Е. Windows обычно ставит 0x0d, 0x0a в конце строк.
В Windows есть разница между:

fopen( "filename", "w" );

fopen( "filename", "tw" );

цитата:
В текстовом режиме комбинации возврата каретки и перевода строки преобразуются в однострочные при вводе, а символы перевода строки переводятся в комбинации возврата каретки и перевода строки при выводе.

0

По вопросам рекламы [email protected]