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

0

Я создал программу, использующую кодирование Huffman для сжатия и распаковки файлов.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
    Что вы используете для отображения содержимого файла? Для меня это не проблема операционной системы, а проблема текстового редактора. Вы использовали Notepad ++ для отображения содержимого файла в Windows?
  • 0
    Спасибо вам большое!
Теги:
file
text
enter

2 ответа

0
Лучший ответ

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

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

  • 0
    Да, это единственное решение. Будьте здоровы.
  • 0
    Благодарю. Приятно знать, что это сработало.
0

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

fopen( "filename", "w" );

fopen( "filename", "tw" );

quote: В текстовом режиме комбинации возврата каретки возвращаются в отдельные строки на входе, а символы перевода строки переводятся в кавычки возвратно-линейных комбинаций на выходе

  • 0
    Я должен записать в файл .txt в двоичном режиме, потому что мне нужно распаковать каждый тип файла .txt (не только ANSI), чтобы мои символы были отдельными байтами.
  • 0
    Да, но когда вы ПРОЧИТАЕТЕ текстовый файл, вы получите исходные комбинации возврата и перевода строки, преобразованные в ОДНОРАЗОВЫЕ ЛИНФИДЫ. Поскольку вы пишете двоичный файл, у вас никогда не будет окон для обратного перевода - вам придется делать это самостоятельно - или читать текстовый файл в режиме BINARY.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню