Ассоциация файлов

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

Для многих файлов существует несколько стандартных действий: например, графический файл можно просмотреть, отредактировать или распечатать.

Способы ассоциации

Через комментарий #!

Уже в 1970-е годы разработчики Unix осознали: набрать script.pl проще, чем perl script.pl. Решение было простейшим: в первой строке скрипта пишется

#!/usr/bin/perl

У этой системы два недостатка: работает только для скриптов (текстовых файлов на правах исполняемых), и требует абсолютный путь к файлу. Второе иногда решают строкой:

#!/usr/bin/env perl

Через поля файловой системы

Связывание файлов с программами на уровне системы было впервые представлено в компьютерах Macintosh в начале 1980-х. Для этого применялись так называемые «коды формата» (особое поле файловой системы Macintosh).

Mac OS X, в дополнение к кодам формата, позволила ассоциировать файлы и по расширениям.

По расширению

В DOS, с его расширениями файлов, Norton Commander предложил файл NC.EXT. В дальнейшем появились сходного формата файлы NCVIEW.EXT и NCEDIT.EXT, отвечавшие за запуск программ просмотра и редакторов соответственно. Похожие вещи были реализованы и в DOS Navigator.

Microsoft Windows предложила «системные» ассоциации файлов и концепцию «глаголов»: что именно надо сделать с файлом, задавалось английской строкой. Наиболее распространённые глаголы Windows — «open» (открыть), «edit» (редактировать), «print» (распечатать), «explore» (просмотреть содержимое). Любая программа могла функцией ShellExecute запустить любой файл (не только программный) — при этом вызывается та программа, которая с этим файлом ассоциирована. Например, если «запустить» HTML-файл, открывается тот браузер, который установлен пользователем, будь это Internet Explorer, Mozilla Firefox, Opera или Google Chrome[1]. Различные схемы URL (http://, ftp:// и т. д.) также могли ассоциироваться со своими программами. Для вызова файла может применяться не только командная строка, но и DDE. Второй, несмотря на то, что это явно устаревшая технология, в ряде случаев предпочтительнее: например, если надо распечатать пять файлов через командную строку, одновременно запускаются пять копий программы, соревнующихся за один принтер. Поэтому отпечатки выходят из принтера в неопределённом порядке; в DDE такой проблемы нет.

Диспетчер файлов отличал ассоциированные файлы (иконка исписанного листа) от неассоциированных (иконка чистого листа); Проводник Windows даёт файлу иконку той программы, которая его открывает. Автозапуск Windows XP позволил запускать разные программы в зависимости от того, что обнаружено на диске: картинки, музыка, видео.

Linux ввёл ассоциации файлов относительно поздно, когда появились графические оболочки. Ассоциирование реализовано через промежуточный слой — MIME-тип: расширение привязывается к типу, а тип — к программе. Похожая настройка реализована в большинстве браузеров: в интернете форматы файлов обычно задаются MIME-типом, а на локальных дисках — расширением.

По MIME-типу

Родом с браузеров. Во многих протоколах Интернета вместе с телом файла ходит строка — MIME-тип, например text/html для HTML или image/jpeg для JPEG.

На случай, если эту строку сервер почему-то не выдал, существует двухуровневое ассоциирование: file.pdf → application/pdf → программа-просмотрщик.

Программы

Существует ряд специальных программ для изменения ассоциаций типов фалов с программами. Например в Windows встроена программа «сопоставление типов файлов или протоколов», доступная из панели управления. Также существуют различные сторонние программы.

Примечания

  1. Разумеется, возможность вызвать конкретную программу осталась, через функцию CreateProcess.