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

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

Я полагаю, что это можно сделать, проверив магическое число подписи файла. Точно так же, как это делается в unix. Итак, я думаю, мне нужно прочитать первые байты файла и сравнить их с сопоставлениями магических чисел (и мне нужно иметь сопоставления, и мне нужно их поддерживать).

Поэтому я подумал, может быть, есть класс только для этой цели? Или, может быть, кто-то сделал это и может поделиться своими мыслями о решении? Спасибо


person Alvis    schedule 29.01.2011    source источник
comment
То же самое... Нашли?   -  person Pedro77    schedule 19.07.2013


Ответы (2)


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

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

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

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

person Ondrej Tucny    schedule 29.01.2011

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

person rerun    schedule 29.01.2011