Разница между текстовым файлом и двоичным файлом в C++
Изучение
Текстовый файл — это файл, в котором данные хранятся в виде символов ASCII, и обычно используется для хранения потока символов. Текстовые файлы организованы вокруг строк, каждая из которых заканчивается символом новой строки (‘\n’). Файлы исходного кода сами по себе являются текстовыми файлами.
Двоичный файл — это файл, в котором данные хранятся в файле так же, как они хранятся в основной памяти для обработки. Он хранится в двоичном формате вместо символов ASCII. Обычно он используется для хранения числовой информации (int, float, double). Обычно двоичный файл может быть создан только внутри программы, и его содержимое может быть прочитано только программой.
Текстовый файл против двоичного файла
Ниже приведены некоторые различия между текстовыми файлами и двоичными файлами.
61. Файлы. Двоичное и текстовое представление файлов.
Файл – именованный объект, хранящий данные на каком-либо носителе (дискета, винчестер, СD). Файл, как и массив, — это совокупность данных, потому они немного похожи. Существенные отличия:
1. Файлы в отличие от массивов располагаются не в оперативной памяти, а на жестких дисках или на внешних носителях, хотя файл может располагаться на так называемом электронном диске (в оперативной памяти).
2. Файл не имеет фиксированной длины, т.е. может увеличиваться и уменьшаться.
3. Перед работой с файлом его необходимо открыть, а после работы – закрыть.
Говоря о файлах нельзя не сказать о файловой системе. Файловая система – это совокупность файлов и управляющей информации на диске для доступа к файлам. Или по-другому – это совокупность программных средств для доступа к файлам. Существует довольно много файловых систем, например, MS-DOS.
В файловой системе МS-DOS имена файлов состоят из двух частей, разделенных точкой: имя файла и расширение. Поле расширения может содержать не более трех символов. Расширение обычно указывает на тип хранимой информации или на структуру файла, может вообще отсутствовать. Примеры наиболее распространенных расширений: exe, com, bat, txt, doc, mp3, htm и др.
Файлы хранятся в каталогах. Допускаются вложенные каталоги (подкаталоги).
Различают два вида файлов: текстовые и бинарные.
Текстовый файл – компьютерный файл, содержащий текстовые данные, как правило, организованные в виде строк.
Текстовые файлы могут быть просмотрены и отредактированы с клавиатуры любым текстовым редактором и имеют очень простую структуру: последовательность ASCII-символов. Примеры известных текстовых файлов: *.bat, *.c, *.asm.
Текстовый файл может содержать как форматированный (шрифт, начертание, размер и т.п), так и неформатированный текст. В MS-DOS и Microsoft Windows для файлов с неформатированным текстом обычно используется расширение txt. Тем не менее, текстовыми могут являться файлы с любым другим расширением или без оного. Например, исходные коды программ обычно хранятся в файлах с расширениями, соответствующими языку программирования, на котором написаны программы .bas, .pas, .c– это тоже текстовые файлы. Форматированный текс (текст с разметкой) хранится в файлах с расширением .rtf, .htm, .html.
Текстовым файлам противопоставляются двоичные файлы, в которых содержатся данные, не рассчитанные на интерпретацию в качестве текса (например, файлы, хранящие закодированные звук или изображение). Двоичный (бинарный) файл – в широком смысле: последовательность произвольных байтов. Двоичные файлы применяются для хранения нетекстовой информации: изображений (bmp, jpg), исполняемых файлов (exe) и др. Но можно привести в качестве примера формат doc, который используется для хранения текстовой информации. Двоичные файлы хранят информацию почти в том виде, в котором она представляется в памяти компьютера во время работы программы. Поэтому при чтении такого файла практически не выполняется никаких преобразований, что ускоряет процесс чтения. Самый большой недостаток двоичных файлов – их непереносимость.
Файлы делятся на текстовые и нетекстовые (последние иногда называют двоичными, или бинарными). Файл, содержащий программу на Си, — текстовый; файл, который вы можете создать, используя, например, встроенный редактор Norton Commander – тоже текстовый. А вот файл, содержащий, например, рисунок в формате JPEG (да и в любом другом графическом формате), — двоичный. Текстовые файлы отличаются от двоичных двумя особенностями: во-первых, они делятся на строки, каждая из которых заканчивается переводом строки, состоящим из двух символов с кодами 0х0D 0х0А; во-вторых, текстовые файлы заканчиваются «признаком конца файла» — символом с кодом 0х1А (точнее, должны заканчиваться, это условие соблюдается не всегда).
При чтении текстового файла (потока) функции Си преобразуют «признак конца строки», т.е. последовательность символов 0х0D 0х0А, в один символ 0х0А (‘\n’), а «признак конца файла (потока)» — в значение ЕОF (End Of File). Константа EOF определена в заголовочном файле stdio.h и обычно равна – 1.
Языки Си-семейства и бинарные файлы: что нужно знать

Программирование включает в себя множество разнообразных языков. С их помощью программисты и разработчики «общаются» с компьютерами и иными устройствами, а также с приложениями. У каждого – свои собственные особенности и нюансы, синтаксис и правила.
При написании софта приходится задействовать разнообразные files и функции. Чтобы создать качественную утилиту, необходимо помнить обо всех особенностях выбранного языка. Но некоторые возможности используются не слишком часто. Из-за этого они «забываются».
Современные программеры активно используют Си-семейство в своей работе. Google указывает, что сюда включают:
- C (Си);
- C++ (Си Плюс-Плюс);
- C# (Си Шарп).
Эти языки стали универсальными и удобными. У них много схожих файлов и функций. Но новичкам освоить данные способы «общения» с компьютерами бывает непросто.
Терминология – что пригодится
Можно написать хороший софт только тогда, когда пользователь хорошо разбирается в том, что он делает. Си-семейство схоже между собой, но каждый язык имеет ключевые особенности.
Перед началом работы с бинарными файлами и Fgets требуется запомнить некоторые ключевые термины. К ним относят следующие понятия:
- базовый класс – класс, от которого осуществляется наследование;
- выражение – сочетание операторов, литералов и переменных, которые интерпретируются согласно установленным правилам языка;
- деструктор – метод класса, который отвечает за деинициализацию объекта;
- идентификатор – имя, присвоенное «элементу» в кодификации;
- класс – некий шаблон, отвечающий за определение формы объекта;
- конструктор – метод класса, используемый при инициализации;
- литерал – фиксированное значение, не изменяемое приложение;
- массив – переменные одного типа, обращение к которым производится по общему «названию»;
- объект – своеобразный экземпляр класса;
- параметры – переменные, получаемые из аргументов, передаваемый функции при вызове;
- переменная (наиболее частый формат – int i) – именованная ячейка памяти;
- строка – последовательность символов, заключенная в двойные кавычки;
- структура – шаблон, определяющий форму объекта с открытыми членами;
- указатель – объект, содержащий так называемый адрес памяти;
- функция – подпрограмма, в которой находится одно или несколько приложения Си, задействованных для определенных задач.
Это – основная терминология для всего Си-семейства. Если какие-то слова при создании кодов не понятны, можно всегда обратиться к помощи Google.
Файлы – виды
C-программирование требует определенных навыков и умений. Для обучения можно использовать Google – там полно полезной информации и даже примеров кодификаций. Но без практики и первоначальных знаний добиться успехов не получится.
В записанных и успешно работающих утилитах есть так называемые файлы. Предназначаются для хранения информации в том или ином виде.
- бинарные файлы в c;
- текстовые файлы.
Каждый используется для чтения и записи собственного «формата». Файл сам по себе, согласно данным из Google – это способ хранения информации.
В C нет операторов для работы с файлами. Необходимые манипуляции производятся при помощи функций стандартной библиотеки <stdio.h>.
Текстовый файл — понятие
Текстовый файл – файл, который содержит текстовые данные. Разбивается на строки посредством специального «разделительного» символа, используемого для обозначения окончания строчки или последовательности:
- в Unix – одиночный символ перевода строки;
- в Windows – после символа перевода строчки устанавливается знак возврата каретки.
В текстовый файл мы записываем кодификации и «простой текст». То, что нужно записать. Это не особый формат информации.
Бинарный файл – что это
Если посмотреть данные в Google по file в C, можно увидеть, что есть еще и так называемые двоичные «элементы». Это – файлы, из которых осуществляется считывание или вывод байтов. Подразумевается их предоставление программеру в «сыром» виде. То есть, без связывания и подстановок.
Разница между файлами
Некоторые перед написанием кода задумываются, в чем разница между указанными видами файлов. Пример – картинка и звуковой документ. Чем они отличаются друг от друга?
Звуковой файл интерпретируется через специальные приложения в звуки, а второй «документ» — в изображение. Аналогичным образом согласно Google ситуация обстоит и рассматриваемыми files. Текстовые рассматриваются в виде «обычного текста», а бинарные интерпретируются в качестве набора двоичных чисел.
В текстовых файлах символ «\n» при записи переводится в «\r\n», при считывании осуществляется так называемая образная замена. В случае с бинарными «элементами» подобный прием не работает ни при каких обстоятельствах.
Особенности работы с бинарными «элементами»
Текстовый файл – понятие далеко не новое. Оно встречается не только в программировании. В Google можно отыскать четкое определение оному. И работа с «обычным текстом» при написании кодификаций не такая уж трудная.
Сложнее использовать двоичный файл. Он встречается в кодах чаще всего. В основном используется для записи чисел и значений.
Для того, чтобы в Си-семействе (в C++ в особенности) работать с бинарными файлами, согласно Google, используется стандартная библиотека. Для текстовых применяются:
- fscanf;
- fpintf.
Бинарные файлы тоже используют соответствующие «архивы», но с некоторыми корректировками. Пример – для чтения используют не параметр «r», а «rb». Работа осуществляется непосредственно с битами. Доступ к данным осуществляется произвольным образом.
Доступ к информации в функции
Для того, чтобы получить доступ к информации в функции произвольно, записывается следующая кодификация:
Fseek (переменная, расстояние, seek_set или seek_cur или seek_end).
Здесь имеет место следующая расшифровка:
- seek_set – открываем файл и ведем отсчет от начала;
- seek_cur – непосредственно от установленного курсора;
- seek_end – конец файла.
Для того, чтобы рассчитать расстояние (битов, на «размер» которых сдвигается указатель), используют sizeof().
Запись и чтение
Немаловажным моментом является запись и чтение. При помощи Google можно разобраться с тем, как создается и используется поток поступаемой информации при обработке кода. Но без «базы» осознать соответствующую информацию не выйдет.
Для записи бинарного файла (из данных Google) используется запись:
Fwrite (ссылка на записываемую информацию, размер, количество «сведений», файловая переменна).
Для того, чтобы осуществить чтение соответствующего документа, задействуется функция под называнием fread. Параметры у нее будут аналогичные.
Fgets – для чего нужна функция
Текстовые файлы согласно Google используются не только обычными юзерами, но и опытными программерами весьма часто. Работать с ними нужно уметь, особенно если речь заходит о написании кодификаций.
Полезной является функция fGets. Это – чтение строки из указанного потока данных с последующим сохранением в виде строчки в параметр string. Происходит это до тех пор, пока приложение не дойдет до конца файла.
Символ новой строки закрывает работу fGets, но служит допустимым. Связано это с тем, что происходит копирование оного в строчку string. Нулевой символ добавляется после прочитанных. Указывает на конец str.
Функция имеет вид: char *fgets (char *str, int num, FILE *stream) – вместо char допускается использование void. Аргументы расшифровываются следующим образом:
- str – указатель на массив, в котором осуществится размещение считанной строчки;
- num – предельно допустимая длина строчки, попадающей под считывание;
- stream – поток данных (указатель на него).
Если чтение строчки успешно, Google говорит, что произойдет возвращение указателя на массив, в который помещены прочитанные сведения. В противном случае программному коду предстоит открыть файл, «просмотреть» его и вернуть значение NULL.
Когда при чтении осуществляется ошибка, возвращается NULL, а в переменную errno происходит запись кода ошибки. А состояние массива, в котором должна была сохраниться строчка, не определяется.
Пример
Вот наглядный пример использования fgets:
В ходе описанного кода произойдет считывание file.txt или первых 99 символов. Все зависит от того, какое именно из событий осуществляется раньше. Результаты выводятся на экран.
Теперь ясно, что такое двоичный файл в c, а также текстовый file. Для чего они используются, тоже. Если хочется более полно изучить соответствующую тему, рекомендуется отправиться на специализированные компьютерные курсы. Их можно пройти дистанционно. Там расскажут не только о файлах в Си-семействе, но и о fgets и иных функциях.
Русские Блоги
Подробно: в чем разница между текстовым форматом и двоичным форматом?
[color = red] [size = xx-large] 1. Теоретический анализ [/ size] [/ color]
Используйте язык C, часто встречающиеся файловые операции. Каковы различия между двоичными файлами и текстовыми файлами? В этой статье я интерпретирую это по-своему! Что не так, я надеюсь, что вы можете дать мне больше советов, или свяжитесь со мной [email protected].
Все мы знаем, что на уровне машины вся информация равна 0/1, и вся информация формируется с помощью различных расположений 0 и 1. Поэтому информация лежит не в самих двух символах 0 и 1, а в расположении двух символов 0 и 1, которые представляют разные значения. Все мы знаем, что 0 и 1 являются двумя крайними значениями импульса на физическом уровне.Если на физическом уровне это может показать, что существует более двух крайних значений импульса, но несколько значений или непрерывных значений, так что на логическом уровне компьютера Существует более двух символов, 0 и 1, может быть много символов, поэтому негатив намного лучше, есть больше способов их упорядочить и объединить, и выражение информации также должно быть более эффективным и насыщенным.
В вышеприведенном абзаце «информация» воплощена в расположении 0 и 1 на уровне машины. Но как эти 0 и 1 становятся текстом, который мы видим в блокноте под средой Windows или изображением, видимым в средстве просмотра изображений? Существует проблема кодирования! Таким образом, разница между двоичным файлом и текстовым файлом является разницей в уровне кодировки.Бинарный файл является кодировкой значения, например, файл текстового файла ASCII является кодировкой ASCII. Кодировка текста может быть фиксированной длины (например, базовый символ ASCII всегда 7-битный, Unicode16-битный), также может быть переменной длины (например, UTF-8). Кодировка значения имеет неопределенную длину (например, BMP), которая интерпретирует эти байты или даже бит, чтобы содержать сообщение через определенные правила чтения.
Помимо проблем с кодированием при передаче информации о памяти и файлах, в
1. Соотношение отображения между исходной программой текстового формата и памятью, которую разработчик может видеть непосредственно
2. Из памяти программы на выходной терминал
Эти два аспекта также имеют проблемы с преобразованием кода!
Ниже я использую диаграмму для перечисления исходного кода (текстовый формат, например, ac), памяти, файлов и выходных терминалов (на самом деле выходные терминалы и файлы могут быть объединены вместе как тип вывода из памяти). Отношения:
Давайте объясним эту картину:
[b] 1. Из «исходной программы» в «в памяти» [/ b]
«\ R \ n» в Java эквивалентен «\ n» в C: печать «\ r \ n» непосредственно в Java или сохранение этой строки в файле и открытие ее с помощью средства просмотра текста — все это разрывы строк. Сохранение в виде текстового файла на языке C. Открытие с помощью средства просмотра текста также является эффектом разрыва строки, но сохраняется в двоичном формате (сохранение исходного формата в памяти), и искаженные коды будут появляться при открытии с помощью средства просмотра текста.
Следовательно, «\ r \ n» в Java и «\ n» в C оба являются «00001010» в памяти, поэтому в Java существует транскодирование и нет необходимости в транскодировании в C.
В исходной программе форма символов преобразуется в форму памяти посредством кодирования (этот формат кодирования настраивается) .Если это целочисленный тип или тип с плавающей запятой, существует также фиксированное представление памяти.
[b] 2. От «в памяти» до «в файле» [/ b]
Если посмотреть на формат хранения, если это двоичный формат, то как данные расположены в памяти с 0 и 1, одинаковы в области хранения файлов.
Если это текстовый формат, вам нужно выполнить некоторые операции транскодирования (например, перевод строки в возврат каретки и перевод строки, пластиковые данные изменяются с 2Byte в Turbo C ++ 3.0 на строковое представление, которое может занимать больше места для хранения)
[b] 3. Из «в файл» в «в память» [/ b]
В C функция fopen может указывать форму открытого файла (текстовый или двоичный). Есть некоторые различия между этими двумя формами чтения:
Чтение в двоичном формате без какой-либо корректировки порядка расположения 0 и 1 в памяти файла, что эквивалентно преобразованию между пространством хранения файла и пространством памяти программы, в это время минимальная единица информации — биты. Другими словами, бит может быть использован для хранения сообщения (например, успех / неудача). Нам нужно проанализировать эти считанные двоичные данные в программе в соответствии с правилами (например, первые два байта могут быть организованы в данные типа int и т. Д.).
Для чтения в текстовом формате необходимо преобразовать символы возврата каретки и перевода строки в символы перевода строки. В это время минимальной единицей информации является байт.
[b] 4. Из «в памяти» в «отладочный выходной терминал» [/ b]
В языке C тип данных int составляет два байта в памяти. Для вывода на терминал его необходимо преобразовать в текстовый формат и вывести в указанный буфер. Затем интерпретатор терминала интерпретирует эти строки как строку байтов и отображает их на экране или В другом месте.
[color=red][size=xx-large]
2. Экспериментальная проверка [/ size] [/ color]
Прежде чем подумать о разнице между двоичными файлами и текстовыми файлами, я подумал: есть программа для просмотра, которая может видеть, насколько хороша двоичная форма файла!
Поэтому я реализовал «средство просмотра двоичных форм для файлов», работающее в командной строке Doc на языке Си. Этот просмотрщик может прочитать файл двумя способами: текстовый режим и двоичный режим, а затем распечатать данные в файле один за другим.При печати один байт отображается как восемь цифр 1/0. Другими словами, я могу использовать этот просмотрщик для выполнения следующих функций:
1. Просмотр файла в двоичном виде ——> Вы можете узнать расположение данных 0/1 в области хранения файла, что можно увидеть интуитивно.
2. Просмотр файла в виде файла ——-> Вы можете узнать, какая работа по транскодированию выполняется по умолчанию в функции чтения файла. Например, возврат каретки и перевод строки переводятся в перевод строки (на уровне машинного кода: «0000110100001010» -> «00001010»)
[color = red] выложил весь код: [/ color]
[color = red] Прежде всего, я сам создал заголовочный файл: myhf.h [/ color]
[color = red] Исходная программа на C:
FileReader.c[/color]
Программа может настроить способ чтения файлов 1. Текст 2 Binary
И путь для чтения файла (абсолютный путь или относительный путь),
Измерьте параметры
Настройте параметры, автоматически сгруппируйте байты для печати данных в файле между каждым байтом
Один пробел пуст для просмотра, каждый байт напечатан с 8 битами, который не выровнен по правому краю.
Космос
[color = red] Ниже я написал тестовую программу:
DemoFile.c[/color]
[color = red] Сначала скомпилируйте соединение, а затем запустите тестовую программу DemoFile.c, снимок экрана двух сгенерированных файлов: [/ color]
[img]http://dl.iteye.com/upload/attachment/431338/f8c140ca-e399-3fc2-b1a5-e5adce0750d0.jpg[/img]
[color=red]
Затем запустите «Бинарный просмотрщик файлов», который я написал, снимок экрана командной строки doc: [/ color]
[img]http://dl.iteye.com/upload/attachment/431340/810c82d2-c2a5-34cf-804f-e7396f188e9d.jpg[/img]
На этом снимке экрана командной строки doc вы можете увидеть эффект строки 0/1, напечатанной этим «средством просмотра двоичных форм для файлов». Эти строки представляют собой форму после того, как файл будет считан в память (здесь распечатано расположение 0/1 в памяти).
Здесь разница между текстовым форматом и двоичным форматом. У каждого должно быть более глубокое и интуитивное впечатление. На самом деле, проще говоря, программа имеет разные выражения в памяти, на жестком диске или в другом месте, и разница в этом выражении вызвана разницей в кодировке. Конечно, в этой статье не упоминаются преимущества и недостатки различных форматов кодирования, например, двоичные файлы могут экономить место и так далее. Заинтересованные друзья могут дальше исследовать сами!
[color = red] Добавлено:
Вышеприведенное объяснение не очень понятно, см. Здесь [url] http://wenku.baidu.com/view/d2b6a923dd36a32d7375810e.html [/ url],
Дайте более четкое определение:
Все файлы находятся в двоичном формате в памяти и на диске, но из-за разной кодировки этих интерпретаций 01, даже одна и та же строка 01 имеет различное значение. Однако, как правило, для записи и чтения должен поддерживаться один и тот же метод кодирования
Так называемый текстовый формат относится к способу кодирования UTF8 и кодированию других символов, наименьшей единицей является байт.
Так называемый двоичный формат относится к способу кодирования, отличному от кодировки символов, и имеет уникальный набор правил для интерпретации 01 в файле, например BMP. Конечно, файлы в этом формате явно искажаются с помощью Блокнота под Windows (поддерживается только кодировка символов), а BMP может быть декодирован с помощью средства просмотра изображений.
К тому же,
Чтение и запись файлов языка C. требует текстовый формат или двоичный формат. Разница в том, что текстовый формат читает 0000110100001010 (\ r \ n). Этот байт станет 00001010 (\ n), в то время как двоичный формат читает 00001010 по-прежнему 00001010. Вышеуказанное действительно только для окон, и запись файлов в текстовом формате под linux \ n не изменится.