Есть ли «хороший» способ различить файл фильма и файл изображения?
Я хотел бы знать, что именно мой «std :: wstring filePath» — фильм или изображение.
Поэтому я мог бы пойти дальше с полной уверенностью, что работаю с известным типом файлов.
Другими словами, у меня есть два класса MyImage а также MyMovie оба нуждаются в пути к файлу в своих конструкторах. Я хотел бы проверить путь к файлу как-то перед созданием одного из этих классов.
bool isMovie(const std::wstring & filePath);
bool isImage(const std::wstring & filePath);
Конечно, я думал о расширениях файлов, но я не уверен, что это хорошо и не подвержено ошибкам решения. Так хорошо ли использовать расширение файла или возможно любое другое возможное решение?
заранее спасибо
Ты можешь использовать libmagic определить, что это за файл. Вы передаете путь к файлу, и он даст вам текстовое описание или тип MIME для файла.
Обычно файлы имеют специальные так называемые магические байты. Если у вас есть контроль над спецификацией, я бы использовал это. Если вы попытаетесь открыть zip, gif или другие двоичные файлы, вы можете найти там несколько отличительных строк.
Существует утилита Unix, которая называется file
это обеспечивает такую функциональность, поэтому, вероятно, существует какой-то стандарт.
SQLite 3 обеспечивает хороший пример. смотреть на 1.2.1 а также 1.2.5. Таким образом, предоставляется не только информация о том, что это БД SQLite 3, но и дополнительный идентификатор приложения, чтобы другие инструменты могли распознать, какая это БД приложения.
Я лично использовал несколько первых байтов файла для кодирования типа и информации о версии моих файлов, когда я играл с бинарным материалом.