2012-09-30 2 views
2

Вот упрощенная версия моей проблемы: у меня есть два текстовых файла, разные данные, но идентичные первой строке и сгенерированные одной и той же программой, хотя возможно и на разных ОС. Когда emacs читает один из них, он говорит, что он находится в формате DOS, а при чтении другой - нет.Emacs, hex editor и определение того, что текстовый файл находится в формате DOS

Я использовал несколько Hex-редакторов (Bless, GHex, OKTeta на Kubuntu), и на всех из них я вижу то же самое, что каждая строка заканчивается последовательностью OD OA (CR LF) для обоих файлов, включая Последняя линия.

Итак, мой вопрос: как emacs определяют, что такое файл DOS, а что нет, и есть ли что-то еще в файле, который редактор Hex не будет показывать или добавить?

Оба файла имеют одинаковое имя в разных каталогах. Также я столкнулся с этой проблемой, потому что у меня есть код на C++, который анализирует строки и не работает в файле, который emacs перечисляет как DOS, поэтому проблема действительно связана с содержимым файла.

Последнее примечание: вы заметите, что нет тегов C/C++. Я не ищу совета о том, как изменить свой код на C++, чтобы справиться с ситуацией. Я знаю, как это сделать.

Спасибо за вашу помощь

+0

Что значит «он говорит, что это в формате DOS»? Как вы это видите? –

+1

Вы на 100% уверены, что внутри файла, отличного от DOS, * все * вхождения CR и LF находятся внутри пар CRLF? Если одна строка отклоняется, Emacs рассмотрит файл как Unix, чтобы избежать потери данных. – user4815162342

+1

@OlegPavliv: Строка состояния (я считаю, что это то, что она называется, внизу, чуть выше строки, где вы вводите свои команды) будет отображаться, начиная с самого левого: - (DOS) --- MyFilename. .. – Alain

ответ

1

Emacs обрабатывает DOS файлы путем преобразования CRLF в LF при чтении файла, а затем LF обратно в CRLF при написании его. Поэтому, если в файле есть LF LF, чтение & записи приведет к добавлению CR, даже если буфер не был изменен. По этой причине, если в середине файла есть такой LF LF, Emacs будет обрабатывать файл не как DOS, а как файл UNIX.