TL; DR: Вопрос в следующем:
- Знаете ли вы о кроссплатформенной библиотеке, которую я могу использовать из C ++ для сопоставления типов (ов) MIME <-> расширения файлов??
Мое приложение должно обрабатывать файлы изображений и видео одинаково.Я стараюсь быть максимально независимым от платформы, поэтому я решил использовать Qt4 в качестве своей основной библиотеки.Платформа Phonon (для обработки видеофайлов) и QImage (для обработки изображений, очевидно) могут сообщать, какие форматы файлов они поддерживают.Phonon вернет список типов MIME, поддерживаемых установленным бэкэндом, а QImage выражает поддерживаемые форматы файлов со списком расширений файлов.
Приложение должно * QString fileName
узнать, создавать ли VideoObject
или ImageObject
от него.Мой подход заключается в создании map<QString, FuncPtr>
, который возвращает соответствующий фабричный метод для создания правильного объекта.Для строки я в настоящее время использую расширение файла, потому что очень легко определить расширение файла по имени файла.Но теперь у меня нет элегантного способа регистрации поддерживаемых типов видеофайлов, поскольку я знаю только их тип MIME.
Если бы я использовал типы MIME для ключа в моем map<QString, FuncPtr>
, я столкнулся бы сс проблемой, как
- a) сопоставить имя файла с типом MIME (не знаю, как сделать эту платформу независимо и расширяемо)
- b) сопоставить расширения файлов, предоставляемыеQImage для типов MIME
Я знаю, что, согласно моим исследованиям до сих пор, многие люди предлагают использовать «файл Apache mime.types», который не позволит мне поддерживать новые форматы файлов (WebM, WebP, ...) когда клиент обновляет серверные части.
Другие предложения, которые я нашел, - это сканировать «/etc/mime.types» в Linux (я мог бы сделать это) или «запрашивать реестр» в Windows (не знаю, как это сделать).Но это кажется очень ограниченным этими двумя платформами, как насчет Mac OS X и т. Д.
В дополнение к вышеупомянутому вопросу я также приветствую другие предложения в любой форме или форме.Возможно, мне не хватает чего-то очевидного.