Укажите, является ли файл изображением, используя .Net framework, а не проверяя магические числа

Со всеми умениями фактической загрузки изображений, выполняемых фреймворком .net, кажется, что мне не нужно повторять все это в моем коде, проверяя магические числа или используя такой хак:

Private Function IsImage(FileName as String) As Boolean
    Try
        Using img As New Bitmap(FileName)
        End Using
    Catch ex as System.ArgumentException
        Return False
    End Try
    Return True
End Function

Я упустил что-то очевидное, например System.Drawing.IsImage(stream)?


person FastAl    schedule 20.04.2011    source источник
comment
возможный дубликат определить, является ли файл изображением   -  person jgauffin    schedule 20.04.2011
comment
Что касается того, почему фреймворк этого не делает, посмотрите этот пост о том, как все функции начинаются с -100 баллов, и люди должны доказывать свою потребность в сравнении с другими функциями. blogs.msdn.com/b/ericgu/archive/ 2004/01/12 / 57985.aspx   -  person Chris Haas    schedule 20.04.2011
comment
Я не думаю, что это особенная «хитрость». Он использует все возможности фреймворка, которые было бы сложно полностью воспроизвести.   -  person AakashM    schedule 20.04.2011
comment
@jgauffin - спасибо за комментарий - но в цитате из ответа на этот пост «Проверьте файл на наличие известного заголовка» - это то, что я имел в виду под «магическими» числами. Мне не хотелось кодировать и тестировать что-то новое (в ответе не было проверенного / проверенного образца .net).   -  person FastAl    schedule 25.04.2011
comment
@Chris Haas - Может, ты просто ответишь «нет»? Я, вероятно, продолжу использовать свой «хак», меня не волнует тип. благодаря.   -  person FastAl    schedule 25.04.2011
comment
@FastAl: Это не магические числа. Это заголовки, указанные в стандартах. Это единственный надежный способ убедиться, является ли файл изображением или нет.   -  person jgauffin    schedule 26.04.2011


Ответы (1)


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

определить, является ли файл изображением

Я не думаю, что в .NET framework уже есть что-то, что могло бы сделать это за вас, кроме загрузки его в изображение и запроса формата изображения:

Найти формат изображения с помощью объекта Bitmap в C #

Альтернативная теория (нет фактических фактов, подтверждающих это): возможно, файл в Windows содержит метаданные, которые помечают его как изображение - так же, как диалог свойств, кажется, показывает информацию об исполнителе для аудиофайлов. Это может быть забавным способом избежать открытия файла.

Редактировать FastAl июнь 2020. Еще полезные ссылки:

Используя .NET, как найти MIME-тип файла на основе подписи файла, а не расширения?

Не то, о чем я просил, но вот магические номера:

https://en.wikipedia.org/wiki/List_of_file_signatures

https://www.garykessler.net/library/file_sigs.html

person Adam Houldsworth    schedule 20.04.2011