Есть ли простой способ определить тип файла, не зная расширения файла?

StackOverflow https://stackoverflow.com/questions/318880

Вопрос

У меня есть таблица с двоичным столбцом, в котором хранятся файлы нескольких различных возможных типов файлов (PDF, BMP, JPEG, WAV, MP3, DOC, MPEG, AVI и т.д.), Но нет столбцов, в которых хранится либо имя, либо тип исходного файла.Есть ли какой-нибудь простой способ для меня обработать эти строки и определить тип каждого файла, хранящегося в двоичном столбце?Предпочтительно, чтобы это была утилита, которая считывала только заголовки файлов, так что мне не нужно полностью извлекать каждый файл, чтобы определить его тип.

Разъяснение:Я знаю, что применяемый здесь подход предполагает чтение только начала каждого файла.Я ищу хороший ресурс (он же links), который может сделать это за меня без лишней суеты.Спасибо.

Также, просто C # / .NET в Windows, пожалуйста.Я не использую Linux и не могу использовать Cygwin (среди прочих причин не работает в Windows CE).

Это было полезно?

Решение

вы можете использовать эти инструменты для определения формата файла.

Анализатор файлов http://www.softpedia.com/get/Programming/Other-Programming-Files/File-Analyzer.shtml

Какой Формат http://www.jozy.nl/whatfmt.html

Анализатор формата PE-файла http://peid.has.it/

Этот веб-сайт может быть вам полезен.http://mark0.net/onlinetrid.aspx

Примечание:я включил ссылки на скачивание, чтобы убедиться, что вы получаете правильное название инструмента и информацию.

пожалуйста, проверьте исходный код, прежде чем загружать их.

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

счастливый инструмент.

Другие советы

Это не полный ответ, но для начала нужно было бы использовать "магические числа" библиотека. При этом проверяются первые несколько байтов файла, чтобы определить «магическое число», которое сравнивается с известным списком из них. Это (по крайней мере часть) того, как работает команда file в системах Linux.

Кто-то еще задал похожий вопрос и опубликовал код, используемый именно для этого. Вы должны быть в состоянии взять то, что опубликовано здесь, и немного изменить его так, чтобы оно извлекалось из вашей базы данных.

https://stackoverflow.com/questions/58510

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

http://software.topcoder.com/catalog/c_component .jsp комп = 13249160 & амп;? вер = 2

Самый простой способ, который я знаю, это использовать команду file , также доступно в Windows с Cygwin .

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

Самый простой способ сделать это - получить доступ к системе * nix (или cygwin), которая имеет команду 'file':

$ file visitors.*
visitors.html: HTML document text
visitors.png:  PNG image data, 5360 x 2819, 8-bit colormap, non-interlaced

Вы можете написать приложение на C #, которое передавало первые X байтов каждого двоичного столбца в команду файла (используя - в качестве имени файла)

Вам нужно использовать некоторый код взаимодействия p / invoke для вызова метод SHGetFileInfo из Win32 API. Эта статья также может помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top