Как определить тип файла?

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


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

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

1


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

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

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

или

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

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

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

3


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

  с использованием System.IO; class Program {static void Main () {string filepath = @ "C:  Users  Sam  Documents  Test.t  xt ";  расширение строки = Path.GetExtension (путь к файлу);  если (расширение == ".mp3") {Console.WriteLine (расширение);  }}}  

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

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

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

1


Path.GetExtension(PathToFile) 

1


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



File.type — веб-API | MDN

Возвращает тип мультимедиа (MIME) файла, представленного объектом File .

Синтаксис

  var name = file.type;  

Значение

Строка, содержащая тип мультимедиа (MIME), указывающий тип файла, например «image/png» для изображений PNG

Пример

   
  функция  showType (fileInput) {var files = fileInput.files;  для (var i = 0; i  

Примечание. В зависимости от текущей реализации браузеры не будут читать байтовый поток файла, чтобы определить его тип носителя. Предполагается, исходя из расширения файла; файл изображения PNG, переименованный в .txt, даст « text/plain «, а не « image/png «. Более того, file.type обычно надежен только для общих типов файлов, таких как изображения, HTML-документы, аудио и видео. Необычные расширения файлов возвращают пустую строку. Конфигурация клиента (например, реестра Windows) может привести к неожиданным значениям даже для общих типов. Разработчикам не рекомендуется полагаться на это свойство как на единственную схему проверки.

Технические характеристики

Спецификация Статус Комментарий File API
Определение «типа» в этой спецификации. Рабочий черновик Первоначальное определение.

Совместимость с браузером

Таблицы BCD загружаются только в браузере

  • Использование файлов из веб-приложений.
  • Сообщение в блоге: скептически относитесь к типам MIME, сообщаемым клиентом.
Оцените статью
clickpad.ru
Добавить комментарий