Формат файла

Формат файла, формат данных — спецификация структуры данных, записанных в компьютерном файле. Идентификатор формата файла, как правило, указывается в конце имени файла в виде «расширения». Расширение имени файла помогает идентифицировать формат данных, содержащихся в файле, программам, которые могут с ним работать. Иногда формат данных дополнительно указывается в начале содержимого файла.

В операционной системе для определения программы, которая может открыть какой-либо файл, применяется сопоставление (ассоциирование) файлов и программ.

Например, окончание имени (расширение) «.txt» обычно используют для обозначения файлов, содержащих только текстовую информацию, а «.doc» — содержащих текстовую информацию, структурированную в соответствии со стандартами программы Microsoft Word. Файлы, содержимое которых соответствует одному формату (реже — одному семейству форматов), иногда называют файлами одного типа.

Так как общепринятая в вычислительной технике концепция файла — неструктурированная последовательность байтов, компьютерные программы, сохраняющие структурированные данные в файлы, должны как-то преобразовывать их в последовательность байтов и наоборот (в ООП эти операции называются, соответственно, «сериализацией» и «десериализацией»; для текстовой информации последнее также называется «разбор» или «парсинг»). Алгоритм этих преобразований, а также соглашения о том, как различные фрагменты структурированных данных располагаются внутри файла, и составляют его «формат».

Различные форматы файлов могут различаться степенью детализации, один формат может быть «надстройкой» над другим или использовать элементы других форматов. Например, текстовый формат накладывает только самые общие ограничения на структуру данных. Формат HTML устанавливает дополнительные правила на внутреннее устройство файла, но при этом любой HTML-файл является в то же время текстовым файлом.

Другой пример — структура компьютерных программ — исполняемых файлов: она должна строго соответствовать некоторым ожиданиям (спецификации) запускающей её операционной системы.

Спецификации

Для многих форматов файлов существуют опубликованные спецификации, в которых подробно описана структура файлов данного формата, то, как программы должны кодировать данные для записи в этот формат и как декодировать их при чтении. Большинство таких спецификаций свободно доступны, некоторые распространяются за плату.

Иногда компании могут считать определённые форматы файлов своей коммерческой тайной и не публиковать их. Хорошо известный пример — форматы файлов пакета Microsoft Office. Однако, с переходом на открытый формат Office Open XML, компания Microsoft, все же опубликовала спецификации форматов под OSP[1][2][3]. В некоторых случаях компания, выпустившая приложение, просто не считает нужным тратить время на написание подробной спецификации.

Если спецификация формата недоступна, то для обеспечения совместимости программы с данным форматом приходится заниматься обратной разработкой. В большинстве или во всех странах форматы файлов не защищены законами об авторских правах. Однако в некоторых странах патентами могут быть защищены алгоритмы, используемые для кодирования данных в какой-либо формат. Например, в широко распространённом формате GIF использовался патентованный алгоритм (срок действия патентов в разных странах истек в 2003—2004 гг.), что привело к разработке альтернативного формата PNG.

Определение типа файла

Тип файла — это информация для быстрой идентификации содержимого файла операционной системой и пользователем без необходимости считывания всего содержимого файла. Благодаря этой информации пользователь приблизительно знает тип содержащейся информации в файле, а в операционной системе может быть сопоставлена программа для обработки файлов данного типа. Для того, чтобы правильно работать с файлами, программы должны иметь возможность определять их тип. По историческим причинам, в разных операционных системах используются разные подходы для решения этой задачи.

Расширение имени файла

Некоторые операционные системы, например, CP/M, RT-11, DOS и Microsoft Windows, используют для определения типа файла часть его имени, то есть «расширение имени файла». В старых операционных системах это были три символа, отделённые от имени файла точкой (в файловых системах семейства FAT имя и расширение хранились отдельно, точка добавлялась уже на уровне ОС); в более новых системах расширение может являться просто частью имени, и тогда его длина ограничена только неиспользованной длиной имени (которая может составлять, например, 255 символов). Например, HTML-файлам может соответствовать расширение «.htm» или «.html».

Пользователь может свободно изменить расширение файла. Поскольку многие оболочки пользователя используют расширение, чтобы определить программу, с помощью которой нужно открыть файл, это может сделать последний недоступным для работы или вообще «потерянным», если пользователь забудет исходное расширение. Поэтому Windows Explorer по умолчанию скрывает расширения. Эта практика имеет и обратную сторону: так как расширения файла не видно, можно обмануть пользователя, заставив его думать, что, например, файл с расширением .exe — изображение с другим расширением. В то же время опытный пользователь может использовать возможность изменить назначенный файлу тип, просто сменив расширение, чтобы открыть его в другой программе, не указывая её напрямую. Это может быть полезно, если в программе не предусмотрено открытия файлов с каким‑то расширением, а пользователь знает, что их формат подходит для обработки в данной программе.

Магические числа

Другой способ, широко используемый в UNIX-подобных операционных системах, заключается в том, чтобы сохранить в самом файле некое «магическое число» (сигнатуру) — последовательность символов, по которой может быть опознан формат файла. Первоначально этот термин использовался для специального набора 2-байтовых идентификаторов, сохраняемых в начале файла (эта практика перекочевала и в другие ОС, например, MZ в MS-DOS), однако, любая последовательность символов, характерная для данного формата, может быть использована как «магическое число».

Для определения формата файла служит команда file, которая использует файл /usr/share/misc/magic

$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
$ file notes.txt
notes.txt: UTF-8 Unicode text
$ file leave_2009-10-12.odt
leave_2009-10-12.odt: OpenDocument Text

Строки с так называемыми «шебангами» в файлах скриптов — особая разновидность «магических чисел». Здесь сигнатура — человекочитаемый текст, который определяет программу - интерпретатор скрипта.

Метаданные

Некоторые файловые системы позволяют сохранять дополнительные атрибуты для каждого файла, то есть «метаданные». Эти метаданные можно использовать для хранения информации о типе файла. Такой подход используется в компьютерах Apple Macintosh. Метаданные поддерживаются такими современными файловыми системами, как HPFS, NTFS, ext2, ext3 и другими. Недостатком этого метода является плохая переносимость — при копировании файлов между файловыми системами разных типов метаданные могут быть потеряны.

MIME

Типы данных, определённые стандартом MIME, широко используются в различных сетевых протоколах, однако в файловых системах они пока применяются редко.

См. также

Примечания

  1. Tamura Jones. Microsoft releases Office Binary Formats. www.tamurajones.net. Дата обращения: 11 января 2018.
  2. Open Specification Promise (англ.). msdn.microsoft.com. Дата обращения: 11 января 2018.
  3. Understanding Office Binary File Formats (англ.). msdn.microsoft.com. Дата обращения: 11 января 2018.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.