Ассоциация файлов
Эту статью предлагается удалить. |
Ассоциация, ассоциирование или сопоставление файлов — в программном обеспечении привязывание файла (по расширению или по каким-либо другим признакам) к прикладной программе, которая обрабатывает эти файлы. При «вызове» этого файла, например, в файловом менеджере, вызовется связанная с ним программа и откроет файл. Обычно эти ассоциации возникают при установке программ установщиком.
Для многих файлов существует несколько стандартных действий: например, графический файл можно просмотреть, отредактировать или распечатать.
Способы ассоциации
[править | править код]Через комментарий #!
[править | править код]Уже в 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 встроена программа «сопоставление типов файлов или протоколов», доступная из панели управления. Также существуют различные сторонние программы.
Примечания
[править | править код]- ↑ Разумеется, возможность вызвать конкретную программу осталась, через функцию
CreateProcess
.