Перейти к содержанию

Текстовые файлы в Linux и WIndows


uliss

Рекомендуемые сообщения

Добрый день!

Проблема такая, мне один сторонник Windows пытается доказать, что в ней файлы не делятся на текстовые и бинарные - аргументы простые крики и ругань Smile Просто я читал где-то по этому вопросу.

Помогите разобраться, плиз.

1. Я понимаю, что низкоуровневым функциям ввода вывода все равно. Им плевать на <CR><LF>. WinAPI функции для работы с файлами читают просто поток символов.

2. Я имею в виду не MIME-типы.

3. Мне нужно разобраться с режимами открытия файлов в языках типа C, C++, Perl, PHP. Так как, опыта в Windows у меня меньше, чем в Linux (так бывает), то в чем разница, кроме трансляции символа '\n'. И что может произойти, если открывать в Windows текстовые файлы с флагом 'b'. Будут ли от этого некорректно работать функции чтения или записи строк?

Смотрел историю вопроса, в Windows последовательность "\r\n" появилась для совместимости со старыми терминалами и принтерами.

Если, знаете, подскажите, что почитать по этому вопросу.

И правомерно ли такое утверждение:

В Windows файлы делятся на текстовые и бинарные. (Не ОНА их делит, а они ДЕЛЯТСЯ)

Ссылка на комментарий
Поделиться на другие сайты

все зависит от того, как читать из файла.

если это чистые винапи функции ввода/вывода, то на им на последовательности перевода каретки действительно плевать, но чистый апи - ИМХО неудобно. а вот если использовать, скажем объект на основе класса CStdioFile из MFC, то 0D0A считать в виде последовательности байтов не получится, зато есть функция чтения строки целиком

К чему это я: винда файлы не делит на те или иные, их делит программист в зависимости от потребностей.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо!

К сожалению, ( или к счастью) с WinAPI и MFC не знаком.

Не подскажете, а что с "чистым" C и C++?

В тоже время, во всех манах пишется, что флаг "b" предназначен для работы в системе Windows c бинарными файлами. (Пример - на php.net/fopen, C/C++ Programmers Reference by Herbert Schildt).

Что может произойти если окрывать файлы в "неправильном" режиме?

Ссылка на комментарий
Поделиться на другие сайты

По идее, при доступе к текстовым файлам в буфер попадают данные построчно, при двоичном - побайтно. И, соответственно, при записи в бинарном режиме - каждый байт последовательно, при текстовом - построчно.

Это означает, чо при попытке записать в текстовом режиме бинарный файл, вы получите \n\t после каждого байта.

Ссылка на комментарий
Поделиться на другие сайты

да все зависит от языка и приемов программирования. если это язык высокого уровня, инкапсулирующий низкоуровневые АПИ ф-ции - один подход; "чистый" С - другой, при этом приходится использовать "голый" винапи если это не простейшее консольное приложение. винда - ОС основанная на объектно ориентированном подходе, посему, хотя и можно программить на С, С++ роднее для винды

Ссылка на комментарий
Поделиться на другие сайты

Спасибо всем!

А как Вам такая формулировка?

1. Текстовые файлы - подмножество бинарных.

2. Программисту в Windows (использующему C*, Perl и др.) нужно различать эти файлы из-за режимов открытия - в Unix нет.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...