TL; DR:问题是:
我的应用程序应该可以处理图像和视频文件。我尝试尽可能地与平台无关,所以我选择使用Qt4作为我的主库。 Phonon框架(用于处理视频文件)和QImage(显然用于处理图像)都可以报告它们支持的文件格式。 Phonon将返回已安装的后端支持的MIME类型的列表,并且QImage用文件扩展名的列表表示受支持的文件格式。
应用程序应该从QString fileName
中找出是要创建VideoObject
还是ImageObject
。我的方法是创建一个map<QString, FuncPtr>
,它返回用于创建正确对象的适当工厂方法。对于字符串,我当前使用文件扩展名,因为从文件名推断文件扩展名非常容易。但是,现在我还没有一种优雅的方式来注册受支持的视频文件类型,因为我只知道它们的MIME类型。
如果我在map<QString, FuncPtr>
中使用MIME类型作为密钥,我将面临如何解决的问题
[我知道,根据我到目前为止的研究,许多人建议使用“ Apache mime.types文件”,这将阻止我在客户端更新时支持新的文件格式(WebM,WebP等)。后端。
我发现的其他建议是在Linux上扫描“ /etc/mime.types”(我可以这样做)或在Windows上“查询注册表”(不知道如何执行此操作)。但这似乎仅限于这两个平台,Mac OS X等如何。
除了上述问题,我也欢迎其他任何形式的建议。也许我缺少明显的脑死亡之物。
就像您已经写过您的问题一样,我会从Apache或一些Linux发行版中获取一个mimefile,并将其与您的应用程序一起提供。
就我个人而言,我认为拥有一个“图书馆”来永久保持最新状态是没有意义的。
MIME在过去几年中发展迅速,但实际上,您只需要在其中定义的所有MIME类型的1%或更少。人们在他们的
上没有各种文件格式如果要浏览某些内容,IANA列出了大多数流行的MIME类型。
TL; DR:使用来自Apache或某些Linux发行版的几乎完整的mimefile交付您的应用程序,不必担心会从所有目标系统“实时”读取它。
MegaMimes是您要寻找的。它是一个C库,为您提供文件的mime类型。该库使用起来非常简单,没有依赖性,可以在所有Unix平台和Windows上很好地运行,不需要外部文件,也不需要Web服务。这是我见过的最好的C mime类型库。