Формат файла

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

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

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

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

Спецификации[править | править исходный текст]

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

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

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

Определение типа файла[править | править исходный текст]

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

Расширение имени файла[править | править исходный текст]

Некоторые операционные системы, например, CP/M, 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, широко используются в различных сетевых протоколах, однако в файловых системах они пока применяются редко.

См. также[править | править исходный текст]

Ссылки[править | править исходный текст]