Решение для проверки типа файла с использованием магического числа в подписи файла (.NET)? - PullRequest
3 голосов
/ 29 января 2011

Я хочу проверить тип загруженного файла (предположим, что файл имеет неправильное расширение).

Я полагаю, это можно сделать, проверив магическое число подписи файла.Точно так же, как это сделано в Unix .Так что я думаю, что мне нужно прочитать первые байты файла и сравнить их с отображениями магических чисел (и мне нужно иметь отображения и мне нужно их поддерживать).Класс там только для этой цели?Или, может быть, кто-то сделал это и может поделиться своими взглядами на решение?Спасибо

Ответы [ 2 ]

4 голосов
/ 29 января 2011

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

Подход, которому вы должны следовать:

  • Сузить набор ожидаемых форматов файлов.
  • Либо сделай сам, основываясь на знании общей структуры и / или характеристик форматов файлов, которые нужно поддерживать, либо найди решение, подобное Файл GNU , упомянутое rerun. Вы также можете посмотреть на такие сайты, как MagicDB - однако этот особенно устарел (2005 год).
  • Укажите поведение для неожиданных форматов файлов.

В случае, если набор достаточно узок, я бы посоветовал простое пользовательское решение как правильное.

3 голосов
/ 29 января 2011

Я не знаю опции .net, но вы можете увидеть, если файл для windows от GNU решит вашу проблему.

...