Как отличить фильм от изображения

Есть ли «хороший» способ различить файл фильма и файл изображения?
Я хотел бы знать, что именно мой «std :: wstring filePath» — фильм или изображение.
Поэтому я мог бы пойти дальше с полной уверенностью, что работаю с известным типом файлов.

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

bool isMovie(const std::wstring & filePath);
bool isImage(const std::wstring & filePath);

Конечно, я думал о расширениях файлов, но я не уверен, что это хорошо и не подвержено ошибкам решения. Так хорошо ли использовать расширение файла или возможно любое другое возможное решение?

заранее спасибо

1

Решение

Ты можешь использовать libmagic определить, что это за файл. Вы передаете путь к файлу, и он даст вам текстовое описание или тип MIME для файла.

3

Другие решения

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

Существует утилита Unix, которая называется file это обеспечивает такую ​​функциональность, поэтому, вероятно, существует какой-то стандарт.

SQLite 3 обеспечивает хороший пример. смотреть на 1.2.1 а также 1.2.5. Таким образом, предоставляется не только информация о том, что это БД SQLite 3, но и дополнительный идентификатор приложения, чтобы другие инструменты могли распознать, какая это БД приложения.

Я лично использовал несколько первых байтов файла для кодирования типа и информации о версии моих файлов, когда я играл с бинарным материалом.

1

По вопросам рекламы [email protected]