TL; DR: Die Frage ist:Bibliothek für plattformübergreifende Zuordnung von MIME-Typen Dateierweiterungen und umgekehrt
- Kennen Sie eine Cross-Plattform-Bibliothek, die ich von C verwenden können ++ zur Karte MIME Typ (en) < -> Dateiendung (en)?
Meine Anwendung soll sowohl Bild- und Videodateien zu handhaben. Ich versuche, so plattformunabhängig wie möglich zu sein, also habe ich Qt4 als meine Hauptbibliothek gewählt. Das Phonon-Framework (für den Umgang mit Videodateien) und QImage (für den Umgang mit Bildern, natürlich) können beide berichten, welche Dateiformate sie unterstützen. Phonon gibt eine Liste der MIME-Typen zurück, die vom installierten Backend unterstützt werden, und QImage drückt die unterstützten Dateiformate mit einer Liste von Dateierweiterungen aus.
Die Anwendung sollte von einem QString fileName
herausfinden, ob ein VideoObject
oder ein ImageObject
daraus erstellt werden soll. Meine Vorgehensweise besteht darin, eine map<QString, FuncPtr>
zu erstellen, die die entsprechende Factory-Methode zum Erstellen des korrekten Objekts zurückgibt. Für die Zeichenfolge verwende ich momentan die Dateierweiterung, weil es sehr einfach ist, die Dateierweiterung vom Dateinamen abzuleiten. Aber jetzt habe ich keine elegante Möglichkeit, die unterstützten Videodateitypen zu registrieren, da ich nur ihren MIME-Typ kenne.
Wenn ich den MIME-Typen für den Schlüssel in meinen map<QString, FuncPtr>
verwendet, würde ich mit dem Problem konfrontiert werden, wie man
- a) Karte der Dateinamen in einen MIME-Typ (keine Ahnung, wie diese Plattform zu tun unabhängig und ausfahrbar)
- b) Karte, um die Datei von QImage zu MIME-Typ zur Verfügung gestellt Erweiterungen
ich weiß, dass, nach meinen Recherchen bisher, schlagen viele Menschen die „Apache mime.types“ zu verwenden, , was mich daran hindern wird, neue Dateien zu unterstützen Matten (WebM, WebP, ...), wenn der Client die Backends aktualisiert.
Andere Vorschläge, die ich gefunden habe, ist "/etc/mime.types" auf Linux (ich könnte das tun) oder "Abfrage der Registrierung" auf Windows (keine Ahnung, wie das zu tun) zu scannen. Aber das scheint sehr auf diese beiden Plattformen beschränkt zu sein, was ist mit Mac OS X usw.
Zusätzlich zu der oben genannten Frage begrüße ich auch andere Vorschläge in irgendeiner Form oder Form. Vielleicht vermisse ich etwas, das offensichtlich tot ist.