Ответ на ваш вопрос, вероятно, просто "регулярные выражения" , поскольку вы запрашиваете алгоритмы, а не инструменты. На самом деле поиск шаблонов в файле, чтобы угадать, что это, безусловно, самый лучший способ решить, что это такое. Если вы сомневаетесь, вы также можете посмотреть на расширение файла (если есть), но вам не следует полагаться на него. Например, в системах UNIX ОС не заботится о расширении файла, когда решает, может ли он выполнить файл или нет. Поэтому никогда не следует полагаться на расширение файла.
Сама задача тривиальна с алгоритмической точки зрения: собирать регулярные выражения, идентифицирующие различные типы файлов. Но это большая работа, для каждого типа файла, который вы хотели бы распознать, вам необходимо ознакомиться с его дизайном, чтобы действительно иметь возможность написать выражение, которое действительно распознает тип файла с минимальным количеством ложных срабатываний и ложных отрицаний. .
Так зачем беспокоиться и пытаться решить проблему, в которую другие люди уже вложили значительные средства? Как вы, вероятно, знаете, наиболее распространенным решением является инструмент UNIX file и его библиотека libmagic
, которые можно легко использовать в ваших программах. Существуют привязки к наиболее распространенным языкам сценариев. «Волшебная» база данных утилиты file
, пожалуй, самая полная из всех, зная об экзотических типах файлов, о которых вы никогда не слышали раньше (поскольку они широко используются годами или десятилетиями) и была настроена и исправлена для долгое время (колоссальные 38 лет).