Чем текстовый файл отличается от бинарного
Т радиционно все файлы принято делить на группы. Есть текстовые файлы, есть видео, аудио, изображения, есть исполняемые файлы программ. А еще есть файлы, именуемые бинарными или двоичными. Обычно под бинарными понимают исполняемые файлы, но насколько правильным является такое определение и есть ли какое-то принципиальное различие между бинарными и текстовыми файлами?
Кто-то скажет, конечно есть, текстовый файл — это тот, который можно открыть текстовым редактором. Правда, здесь необходимо уточнить, каким именно редактором нужно открывать тот или иной файл. Блокнотом? Взять хотя бы документ Microsoft Word . Его тоже можно открыть Блокнотом или Notepad++ , но какова только будет интерпретация его содержимого? Очевидно, что ничего прочитать в нём вы не сможете.
Впрочем, Блокнотом вы можете открыть и аудио, и изображение, и при этом тоже получите набор текстовых знаков, однако никому ни придет в голову назвать такие файлы текстовыми. Получается так, что текстовый файл это тот, содержимое которого представлено человеческим языком и не важно, какая программа перевела его содержимое на этот язык. А что насчет файлов скриптов, а еще лучше раскомпилированных exe -файлов, ведь их содержимое (исходный код) тоже обычно представлено человеческим языком? Они получаются тоже текстовые?
На самом деле никакого критерия, который позволял бы отделять текстовые файлы от бинарников нет, тем более, что сами операционные системы таких различий не делают, вместо этого они смотрят на расширение файла и в некоторых случаях на его внутреннюю подпись, запуская файл в соответствующей расширению программе. Что же касается их внутренней структуры, то здесь между ними нет никакого принципиального различия.
Если копнуть глубже, содержимое всех файлов можно представить в виде двоичного машинного кода, то есть все файлы без исключения по сути являются бинарными. Микропроцессору совершенно без разницы, какой файл ему подсунут, будет ли он содержать команды или просто данные, процессор станет интерпретировать или по крайней мере будет пытаться интерпретировать его содержимое как команды.
Понятие текстовый файл существует лишь в нашем сознании, таковым его делают наличие «читаемых» символов — букв алфавитов, пробелов, точек и запятых, восклицательных знаков и тире, словом всего того, что позволяет нам выражать свои мысли и эмоции в письменном виде и именно эта сложность является еще одним доказательством бесспорного превосходства человеческого ума над машиной.
чем отличается работа с бинарными файлами, от работы с обычными .
Все Программы для Windows пишут, обычно, на C+ (высокоуровневый язык) или на Assembler`е (низкоуровневый язык) .
Файл оч. жёстко привязан к Файловой системе. Файлы создаются (генерируются) Программами.
Под бинарностью, обычно, подразумевают:
а) два положения ключа (открыто/закрыто) ;
б) способ цифровой записи сигнала (1/0);
в) два вида сигнала (да/нет) ;
г) уровень сигнала (есть/отсутсвует) .
Обычные файлы можно открыть по Расширению с помощью Программы, которая может понять эти Расширения.
Бинарный код это машинный язык. Чтобы отличить где начало, а где конец Файла используют Стартовый и Стоповый биты.
Бинарный код состоит из битов информации. Это единицы и нули. Биты складываются в байты. Байты в свою очередь делятся на Старшие Байты и Младшие Байты.
Для обычных Файлов составляют n-разрядные символы. И тело Файла формируют из набора таких символов. Формирование символов производится в совокупной работе Программы и Операционной системы. Иногда, при передаче по Сетевому кабелю, по телефонным проводам, по ВЧ-выделенной линии часть информации может потеряться. Тогда применяют перекодировку передаваемых символов.
Существуют различные кодировки типа MIME, UUE, XXE, BinHex, SFV, MD5. Они позволяют упростить (убрать n-разрядность) передаваемую информацию по Сети, через Интернет. Однако, скорость передачи Файла заметно снижается из-за того, что при таких способах перекодирования будет возрастать объём передаваемой информации.
Есть какой-то Файл, с Расширением *.bin, но он, вообще-то, обычный Архив.
Чтобы интерпретировать обычные символы можно воспользоваться Калькулятором. Но, он работает только с числами. В Реестре есть встроенный интерпретатор, который позволяет переводить обычные n-разрядные символы в Hex-числа (в шестнадцетиричную систему счисления) . А Калькулятор может перевести Hex-числа в бинарный вид.
В общем, чтобы работать с бинарным кодом нужно иметь специальную программу, которая произведёт эти два вычисления, и сможет записать на Диск информацию, т. е. сгенерирует Файл.
А как выглядят бинарные Файлы, даже не представляю. Наверное, если откроешь с помощью Блокнота, там будут сплошные Крякозябы (нечитабельные символы).
работа с бинарными отличается тем что ты записываешь информацию в них не текстом как в текстовый тип а записываешь последовательности байтов. впринципе записать в них можно хоть че — даже просто обычный текст, но предворительно надо будет перекодировать весь текст в массив байтов. Про калькулятор советую забыть — ничего он не даст — просто переведешь числа из 16-ричной системы в десятичную от 0 до 255. В среде программирования Visual Studio не надо кст ничего переводить — читаешь из такого файла он те сам переводит (что я и делаю).
Бинарные и текстовые форматы
Все форматы файлов (включая и форматы для хранения текстовых документов в файлах) можно подразделить на бинарные и текстовые .
Текстовый формат файла – это формат, основанный на plain text. Вся информация представлена в виде текста. В текстовом формате можно представить любую информацию – но её нужно закодировать в текстовый вид.
Особенно популярны текстовые форматы, разумеется, для текстовых документов. Не следует, однако, путать “текстовый формат” с “форматом plain text”. В текстовом формате может быть представлена и любая дополнительная информация – но она особым образом оформляется, чтобы отделить её от собственно текста документа.
Формат файла, не основанный на plain text, называется бинарным (от binary – англ. “двоичный”, поскольку в нём может использоваться любая последовательность двоичных данных). Например, офисный пакет Microsoft Office хранит документы, как правило, в файлах бинарных форматов.
Наиболее известный (и достаточно простой) текстовый формат – HTML . Он используется для Web-страниц. Вот как выглядит текст в формате HTML:
Это обычный текст страницы,
При просмотре Web-страницы данный текст будет выглядеть так:
Заметим, что информация о курсиве, переводе строки и ссылке (на сайт www.ru) указана в виде текста, но не попала в сам текст страницы. Также важно, что обычный перевод строки в файле не попал в текст страницы – строка переведена там, где была последовательность
Последовательности, заключённые в угловые скобки < >– не части текста, а способ указания дополнительной информации.
В формате HTML предусмотрено указание только тех видов дополнительной информации, которые нужны именно на Web-страницах. Но в последнее время активно развивается формат XML , который построен по тому же принципу, но обеспечивает работу практически с любыми видами информации.
На основании формата XML, который является достаточно обобщённым, можно создать самые разные виды форматов файлов для разных целей. И многие современные программы хранят информацию именно в файлах формата XML. Так, офисный пакет OpenOffice.Org, с которым вам предстоит познакомиться в дальнейших уроках, использует файлы формата XML.
(Правда, OpenOffice.Org сжимает файлы при помощи встроенного архиватора, аналогичного Zip. Это нужно, чтобы уменьшить их размер; кроме того, внутри архива может быть несколько файлов, хотя они составляют один документ. Таким образом, формат OpenOffice.Org всё же является бинарным – но “раскрыв” содержимое архива при помощи стандартного архиватора Zip, можно получить данные в текстовом формате).
Отличие текстовых и бинарных файлов (модификаторы b и t)
Всем привет.
Просто Си
Читал вот про текстовые и бинарные файлы, но так и не смог понять, как конвертятся символы \r\n когда мы открываем файл как бинарный или как текстовый.
Вот допустим есть текстовый файл, в котром при просмотре мы можем увидеть две строки:
1. Тоесть на диске в Windows этот файл содержит 10 символов, а именно «one\r\ntwo\r\n», тоесть размер каждой буковки и для каждой строки еще и две пары символов \r\n. Это так?
2. Если мы читаем-записываем этот файл как бинарный и заносим все элементы этого файла в строковый массив то в нем будут эти символы \r\n ?
Нужно ли сдесь следить чтобы при записи этого же массива обратно в файл в нем не оказалось кроме r\n\ еще и \o ?
Что будет если я попытаюсь записать в этот файл строку с символом \0 ?
3. Если мы читаем-записываем этот файл как текстовый, он автоматически заменит \r\n\ на \0 или как он вообще поступит в этом случае?
Как запишется в этот файл массив char с признаком конца \0 ?
Если записать две строки с символом \0 — он их запишет вторую под первой?
2 ответа
12 декабря 2006 года
630 / / 21.10.2005
В общем текстовых файлов нету. Все файлы бинарные. (Запомни 🙂 ). Другое дело ф-ции для работы с файлами. И методы отображения на экран.
Запись.
Завершающий 0 не пишется текстовыми ф-циями.
По сути запись мало отличается от бинарной, то есть пишется все то, что ты туда всунеш.
При твоем желании сделать перевод строки, ты явно, в записываемой строке, указываеш последовательность \r\n.
А вот все приколы начинаются с чтением.
Когда ты используеш «текстовую» ф-цию для чтения из файла строки (fgets например) то, при достижении последовательности 0x0D-0x0A(для вин) ф-ция прекращает чтение, формирует строку, не включая 0x0D, 0x0A (хотя могут быть варианты, может и включить, читать описалово нуна) и дополняет ее 0(тут тоже с вариантами — но это есть в описании к конкретным ф-циям.). Следующий вызов к ф-ции чтения приведет к чтению СЛЕДУЮЩИХ ЗА 0x0D, 0x0A байтов и формирования строки из них.
Кстати 0x0D, 0x0A — не единственные «запрещенные в текстовых ф-циях» значения. Все значения до 0x20(пробел) так или иначе транслируются (т.е. не попадают в строку в обычном виде). Например 0х09 — может транслироватся в 4 пробела, или же остатся табом. Но при отображении на экран символ таб, хоть он и один — все равно растянется.
Теперь конкретнее по твоим вопросам.
1) Не факт. Возможна юникс нотация когда в файле содержится лиш \n. Но текстовая ф-ция прочитает за раз все-равно только до этого символа.
2)
>>заносим все элементы этого файла в строковый массив то в нем будут эти символы \r\n ?
Для большинства ф-ций — нет, последовательность \r\n не занесется.
На счет \0 — не помню, нужно проверить. Возможно некоторые ф-ции его и возьмут, тогда у тебя за одно чтение получится 2 строки. Но скорее всего, что не включат.
НО \0 добавится автоматом, в конец строки ПОСЛЕ ее прочтения.
3)Ну тут кажись и так должно уже быть все понятно.
Ну хз, вроде в основном все. Дальше начнутся тонскости по использованию разделителя строк. Например ф-ция fscanf читает строки не до \r\n, а до первого сивола разделителя (символ