![]() |
|
Модераторы: bsa |
![]()
|
|
| Alexey91 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
Здравствуйте!
Кто-нибудь может объяснить отличия этих типов файлов? |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
Ничем не отличаются кроме расширения и MIME. Но в винде при открытии файла в текстовом режиме часть даных может быть интерпретирована и ты получишь не совсем то, что читал (или записывал).
-------------------- You're face to face With man who sold the world |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Другими словами, виндовая функция чтения при открытии файла в текстовом режиме конвертирует комбинацию символов "\r\n" в "\n". Таким образом, правильно работающий код под любым Unix при переносе в Windows может начать глючить, так как в *nix концом строки является именно '\n', а не пара '\r\n' |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
опа ) это что за магическая функция такая? -------------------- |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
у венды нет таких функций
-------------------- |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
||||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
ето сишные функции а не виндовые
-------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
500mhz, скажем так, сишные функции в венде, ведут себя не так, как сишные функции не в венде.
Кроме \n \r, есть еще несколько управляющих символов, которые в текстовом файле ведут себя не так как в бинарном. Например 0x1a - конец файла. Если в файле открытом в текстовом режиме встретится такой байт, функция чтения вернет конец файла, даже если после этого байта есть еще пару гигабайт. В принципе это и не в венде должно так быть..., линуксоды поправят, если что.. |
|||
|
||||
| Lols |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 21.10.2011 Репутация: нет Всего: нет |
А что можно сделать, чтобы винда корректно все выдавала? :(
Не хочу юникс... |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
Забить на сишные вызовы и использовать WinApi -------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
А она корректно выдает. Это сделано исключительно для удобства программистов. иначе бы пришлось все выводить с двумя символами, например: printf ("строка\r\n"); В винапи, походу так и пишут, везде где нужен перевод строки, вставляют \r\n Си в этом отношении удобней. |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
ниче если я вас разочарую ?
угадайте что получим в месадж боксе -------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
500mhz, Вы меседж бокс используете в качестве статического анализатора кода?
Это сообщение отредактировал(а) volatile - 29.10.2011, 01:55 |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
ага )
-------------------- |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
| Twelves |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 22.6.2011 Репутация: нет Всего: нет |
А что на счет бинарного режима в юникс? там же все файлы вроде считаются текстовыми? <извините, просто опыта работы с никс системами у меня нет>
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Язык С пришел из мира UNIX (именно для написания самого юникса он и создавался). В юниксе конец строки что в коде, что в файлах не отличается - это символ '\n'. А вот в MSDOS его создатель пошел другим путем - он сделал конец строки состоящим из двух последовательных байт "\r\n". Так как по стандарту языка С требуется, чтобы строки заканчивались на '\n', то функции чтения некоторых ОС (Windows, DOS и к ним приближенных) заменяют последовательность символов \r\n на \n, а функции записи в файл производят обратную операцию. Но эта операция может повредить двоичные данные, поэтому в этих ОС (и только в них) был введен специальный режим - двоичный, который активируется добавлением флага O_BINARY в функцию open или "b" в fopen. В UNIX этих флагов вообще нет, поэтому программист обязан окружать использование этого флага #ifdef _WIN32/#endif |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
bsa
ну что вы куйню пишете как лузер последний а?
в каком нафиг коде ? wiki и не надо путать теплое с мягким, ОС и С lib это разные весчи. в ОС нет понятия текстовый или бинарный файл, ей все равно. гуглите параметры для sys_create (nix) и CreateFile (win) -------------------- |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
| bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Может мы с тобой еще на уровень машинных кодов опустимся? Зачем новичка грузить "ОС" или "libc"? Тем более, что в стандарте языка С нет ни sys_create, ни CreateFile. Поэтому их мы не обсуждаем. По поводу конца строки, возможно, я не так выразился. Поэтому следует читать "символ разрыва строки" вместо "символ конца строки". P.S.: возможно, это и непонятно, но для системы нет отличий, текстовый файл или нет. Все проблемы вытекают только из-за представления разрыва строки в разных ОС. Именно поэтому требуется указывать при открытии файла, что за содержимое в нем. |
||||||
|
|||||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
0_BINARY в Линуксе нет. Но писать #ifdef не обязательно. достаточно один раз в своём заголовке написать
"b" в fopen() действительно игнорируется аналогично с std::ios::binary Это сообщение отредактировал(а) math64 - 2.11.2011, 15:06 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |