2010-11-20 2 views
3

TL; DR: La question est:Library pour la cartographie multi-plateforme de types MIME pour extensions de fichiers et vice versa

  • Connaissez-vous d'une bibliothèque multi-plateforme que je peux utiliser à partir de C++ pour la carte MIME type (s) < -> Extension de fichier (s)?

Mon application est censé gérer les fichiers image et vidéo aussi bien. J'essaie d'être aussi agnostique que possible, donc j'ai choisi d'utiliser Qt4 comme ma bibliothèque principale. Le framework Phonon (pour gérer les fichiers vidéo) et QImage (pour la gestion des images, évidemment) peuvent tous les deux signaler les formats de fichiers qu'ils prennent en charge. Phonon renverra une liste de types MIME pris en charge par le backend installé et QImage exprime les formats de fichiers pris en charge avec une liste d'extensions de fichiers.

L'application doit savoir à partir d'un QString fileName si créer un VideoObject ou un ImageObject à partir de celui-ci. Mon approche consiste à créer un map<QString, FuncPtr> qui renvoie la méthode d'usine appropriée pour créer l'objet correct. Pour la chaîne, j'utilise actuellement l'extension de fichier, car il est très facile de déduire l'extension du fichier à partir du nom du fichier. Mais maintenant je n'ai pas un moyen élégant d'enregistrer les types de fichiers vidéo supportés, puisque je ne connais que leur type MIME.

Si je les types MIME pour la clé dans mon map<QString, FuncPtr>, je serais confronté au problème comment

  • a) mapper le nom de fichier à un type MIME (pas d'idée comment faire cette plate-forme indépendamment et en extension)
  • b) mapper les extensions de fichiers fournis par QImage à des types MIME

je sais que, d'après mes recherches jusqu'à maintenant, beaucoup de gens suggèrent d'utiliser le « fichier mime.types Apache » , ce qui m'empêchera de soutenir le nouveau fichier pour tapis (WebM, WebP, ...) lorsque le client met à jour les back ends.

Autres suggestions que j'ai trouvé est de scanner "/etc/mime.types" sur Linux (je pourrais le faire) ou de "interroger le registre" sur Windows (aucune idée de comment faire cela). Mais cela semble très limité à ces deux plateformes, à propos de Mac OS X, etc.

En plus de la question mentionnée ci-dessus, j'apprécie également d'autres suggestions sous quelque forme que ce soit. Peut-être qu'il me manque quelque chose de mort cérébral évident.

Répondre

4

Comme vous l'avez déjà écrit sur votre question, j'irais chercher un mimefile d'Apache ou une distribution Linux et l'expédierais avec votre application.

Personnellement, je pense qu'il ne sert à rien d'avoir une "bibliothèque" pour cela "rester en permanence à jour". MIME a grandi au cours des dernières années, mais en réalité, vous n'avez besoin que de 1% ou moins de tous les types MIME définis. Les gens n'ont pas toutes sortes de formats de fichiers sur leur

Si vous voulez parcourir certains, IANA liste la plupart des types MIME populaires.

TL; DR: Expédiez votre application avec un mimefile d'Apache ou d'une distribution Linux et ne vous inquiétez pas de le lire "en direct" sur tous les systèmes cibles.

Questions connexes