Как определить тип файла? - PullRequest
5 голосов
/ 14 ноября 2010

Мне нужно знать, является ли мой файл аудиофайлом: mp3, wav и т. Д.
Как это сделать?

Ответы [ 5 ]

5 голосов
/ 14 ноября 2010

Ну, самый надежный способ - написать синтаксический анализатор для типов файлов, которые вы хотите обнаружить, а затем просто попробовать - если ошибок нет, очевидно, это тот тип, который вы пробовали.Однако это дорогостоящий подход, но он гарантирует, что вы также можете успешно загрузить файл, поскольку он также проверит остальную часть файла на предмет семантической стойкости.для «магических» байтов - подписи в начале или известные смещения файла.Например, если файл начинается с тега ID3, вы можете быть уверены, что это файл MP3.Если файл начинается с RIFF¼↕☻ WAVEfmt, то это WAV-файл.Однако такое обнаружение не может гарантировать, что файл действительно относится к этому типу - это может быть просто подпись и следование этому мусору.

2 голосов
/ 14 ноября 2010

Хотя вы можете использовать расширение, чтобы сделать разумное предположение относительно того, что это за файл, он не гарантированно будет работать 100% времени.Если вы ориентируетесь на Windows, то будет работать в 99,9% случаев, так как Windows отслеживает, какой тип файла.

Если вы получаете файлы из источников, отличных от Windowsединственный верный способ - открыть файл и найти определенную строку или набор байтов, которые однозначно идентифицируют его.Например, вы можете искать теги ID3 в файле mp3:

Тег ID3v1 занимает 128 байтов, начиная со строки TAG.

или

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

Как далеко вы зайдете, зависит от того, какНадежный, вы хотите, чтобы ваше решение было, и полагается на наличие заголовка или шаблона, который всегда присутствует.

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

0 голосов
/ 14 ноября 2010
Path.GetExtension(PathToFile)
0 голосов
/ 14 ноября 2010

См. этот пост. В итоге вы передаете первые (до) 256 байтов данных из файла в FindMimeFromData (часть Urlmon.dll).

0 голосов
/ 14 ноября 2010

Вы можете использовать расширение файла, чтобы выяснить это:

using System.IO;

class Program
{
    static void Main()
    {
        string filepath = @"C:\Users\Sam\Documents\Test.txt";

        string extension = Path.GetExtension(filepath);
        if (extension  == ".mp3")
        {
            Console.WriteLine(extension);
        }
    }
}

Расширение файла является первой точкой вызова для ОС, чтобы выяснить, с каким типом файла он имеет дело, если вы действительно хотите знать тип файла, 100% единственный способ сделать это - прочитать в файл. Но в этом есть одна загвоздка: файлы изображений просты, поскольку содержат заголовки в довольно удобном для чтения формате, однако с полностью изменяемым типом файлов это может быть немного сложнее.

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

В конечном итоге это зависит от того, почему вы пытаетесь это сделать.

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