uliss Опубликовано 27 октября, 2005 Жалоба Поделиться Опубликовано 27 октября, 2005 Добрый день! Проблема такая, мне один сторонник Windows пытается доказать, что в ней файлы не делятся на текстовые и бинарные - аргументы простые крики и ругань Просто я читал где-то по этому вопросу. Помогите разобраться, плиз. 1. Я понимаю, что низкоуровневым функциям ввода вывода все равно. Им плевать на <CR><LF>. WinAPI функции для работы с файлами читают просто поток символов. 2. Я имею в виду не MIME-типы. 3. Мне нужно разобраться с режимами открытия файлов в языках типа C, C++, Perl, PHP. Так как, опыта в Windows у меня меньше, чем в Linux (так бывает), то в чем разница, кроме трансляции символа '\n'. И что может произойти, если открывать в Windows текстовые файлы с флагом 'b'. Будут ли от этого некорректно работать функции чтения или записи строк? Смотрел историю вопроса, в Windows последовательность "\r\n" появилась для совместимости со старыми терминалами и принтерами. Если, знаете, подскажите, что почитать по этому вопросу. И правомерно ли такое утверждение: В Windows файлы делятся на текстовые и бинарные. (Не ОНА их делит, а они ДЕЛЯТСЯ) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Byte Опубликовано 27 октября, 2005 Жалоба Поделиться Опубликовано 27 октября, 2005 все зависит от того, как читать из файла. если это чистые винапи функции ввода/вывода, то на им на последовательности перевода каретки действительно плевать, но чистый апи - ИМХО неудобно. а вот если использовать, скажем объект на основе класса CStdioFile из MFC, то 0D0A считать в виде последовательности байтов не получится, зато есть функция чтения строки целиком К чему это я: винда файлы не делит на те или иные, их делит программист в зависимости от потребностей. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
uliss Опубликовано 28 октября, 2005 Автор Жалоба Поделиться Опубликовано 28 октября, 2005 Спасибо! К сожалению, ( или к счастью) с WinAPI и MFC не знаком. Не подскажете, а что с "чистым" C и C++? В тоже время, во всех манах пишется, что флаг "b" предназначен для работы в системе Windows c бинарными файлами. (Пример - на php.net/fopen, C/C++ Programmers Reference by Herbert Schildt). Что может произойти если окрывать файлы в "неправильном" режиме? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Aceler Опубликовано 30 октября, 2005 Жалоба Поделиться Опубликовано 30 октября, 2005 По идее, при доступе к текстовым файлам в буфер попадают данные построчно, при двоичном - побайтно. И, соответственно, при записи в бинарном режиме - каждый байт последовательно, при текстовом - построчно. Это означает, чо при попытке записать в текстовом режиме бинарный файл, вы получите \n\t после каждого байта. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Byte Опубликовано 31 октября, 2005 Жалоба Поделиться Опубликовано 31 октября, 2005 да все зависит от языка и приемов программирования. если это язык высокого уровня, инкапсулирующий низкоуровневые АПИ ф-ции - один подход; "чистый" С - другой, при этом приходится использовать "голый" винапи если это не простейшее консольное приложение. винда - ОС основанная на объектно ориентированном подходе, посему, хотя и можно программить на С, С++ роднее для винды Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
uliss Опубликовано 1 ноября, 2005 Автор Жалоба Поделиться Опубликовано 1 ноября, 2005 Спасибо всем! А как Вам такая формулировка? 1. Текстовые файлы - подмножество бинарных. 2. Программисту в Windows (использующему C*, Perl и др.) нужно различать эти файлы из-за режимов открытия - в Unix нет. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
EL[michlen] Опубликовано 2 ноября, 2005 Жалоба Поделиться Опубликовано 2 ноября, 2005 Ну почему... в Unix можно использовать функции open (read, write...) а можно fopen (...). То же справедливо и для Windows. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.