Как я могу определить, является ли файл файлом изображения в .NET?

Я не хочу полагаться на расширение файла. Мне все равно, какой тип изображения (.jpg, .png и т. Д.), Я просто хочу знать, является ли файл изображением или нет. Я бы предпочел не использовать никакие не .NET библиотеки, если это возможно.

Лучший способ, которым я знаю, как это сделать, заключается в следующем:

bool isImageFile;
try
{
    Image.FromFile(imageFile).Dispose();
    isImageFile = true;
}
catch (OutOfMemoryException)
{
    isImageFile = false;
}

Как отмечено здесь:http://msdn.microsoft.com/en-us/library/stf701f5.aspx, Image.FromFile() бросаетOutOfMemoryException если файл не является допустимым форматом изображения. Использование выше дает мнеименно тот результат, который я хочуОднако я бы предпочел не использовать его по следующим причинам:

Я считаю, что использование try-catches для нормального выполнения программы является плохой практикой по соображениям производительности.Image.FromFile() загружает весь файл изображения (если это файл изображения) в память. Я полагаю, что это расточительно, потому что мне нужен только тип файла, и на этом этапе в моем коде не требуется никаких дополнительных манипуляций с изображениями.Я не люблю ловитьOutOfMemoryExceptions потому что что, если есть РЕАЛЬНАЯ проблема нехватки памяти, и моя программа глотает это и продолжает идти?

Есть ли лучшие способы сделать это? Или же,какие-либо / все мои проблемы, перечисленные выше, неоправданны?

Редактировать: С момента получения ответов здесь, этотри решения Теперь я знаю о:

Загрузить все изображение в память черезImage.FromFile() и попытка поймать.Pros: Глубже проверяет содержимое файлов изображений; охватывает много типов изображений.Cons: Самый медленный; накладные расходы от try-catch и загрузки полного файла изображения в память; потенциальная опасность от «реального» исключения OutOfMemoryException.Проверьте байты заголовка файла изображения.Pros: Быстрое, низкое использование памяти.Consпотенциально хрупкие; нужно программировать для каждого типа файла.Проверьте расширение файла.Pros: Самый быстрый; Простейшие.Cons: Не работает во всех ситуациях; легче всего ошибиться.

(Я не вижу явного «победителя», поскольку могу представить себе ситуацию, в которой каждый из них был бы уместен. Для целей моего приложения проверка типа файла происходит достаточно редко, чтобы проблемы с производительностью метода 1 не были проблемой.)

Ответы на вопрос(6)

Ваш ответ на вопрос