用于将MIME类型跨平台映射到文件扩展名的库,反之亦然

问题描述 投票:3回答:2

TL; DR:问题是:

  • 您知道我可以在C ++中使用的跨平台库来映射MIME类型文件扩展名吗?

我的应用程序应该可以处理图像和视频文件。我尝试尽可能地与平台无关,所以我选择使用Qt4作为我的主库。 Phonon框架(用于处理视频文件)和QImage(显然用于处理图像)都可以报告它们支持的文件格式。 Phonon将返回已安装的后端支持的MIME类型的列表,并且QImage用文件扩展名的列表表示受支持的文件格式。

应用程序应该从QString fileName中找出是要创建VideoObject还是ImageObject。我的方法是创建一个map<QString, FuncPtr>,它返回用于创建正确对象的适当工厂方法。对于字符串,我当前使用文件扩展名,因为从文件名推断文件扩展名非常容易。但是,现在我还没有一种优雅的方式来注册受支持的视频文件类型,因为我只知道它们的MIME类型。

如果我在map<QString, FuncPtr>中使用MIME类型作为密钥,我将面临如何解决的问题

  • a)将文件名映射到MIME类型(不知道如何独立且可扩展地执行该平台)
  • b)将QImage提供的文件扩展名映射到MIME类型

[我知道,根据我到目前为止的研究,许多人建议使用“ Apache mime.types文件”,这将阻止我在客户端更新时支持新的文件格式(WebM,WebP等)。后端。

我发现的其他建议是在Linux上扫描“ /etc/mime.types”(我可以这样做)或在Windows上“查询注册表”(不知道如何执行此操作)。但这似乎仅限于这两个平台,Mac OS X等如何。

除了上述问题,我也欢迎其他任何形式的建议。也许我缺少明显的脑死亡之物。

c++ qt4 mime-types file-type
2个回答
4
投票

就像您已经写过您的问题一样,我会从Apache或一些Linux发行版中获取一个mimefile,并将其与您的应用程序一起提供。

就我个人而言,我认为拥有一个“图书馆”来永久保持最新状态是没有意义的。

MIME在过去几年中发展迅速,但实际上,您只需要在其中定义的所有MIME类型的1%或更少。人们在他们的

上没有各种文件格式

如果要浏览某些内容,IANA列出了大多数流行的MIME类型。

TL; DR:使用来自Apache或某些Linux发行版的几乎完整的mimefile交付您的应用程序,不必担心会从所有目标系统“实时”读取它。


0
投票

MegaMimes是您要寻找的。它是一个C库,为您提供文件的mime类型。该库使用起来非常简单,没有依赖性,可以在所有Unix平台和Windows上很好地运行,不需要外部文件,也不需要Web服务。这是我见过的最好的C mime类型库。

© www.soinside.com 2019 - 2024. All rights reserved.