在Windows上查找文件的MIME类型

时间:2010-03-30 21:52:01

标签: c++ windows mime-types

有没有办法在Windows上使用某些系统调用来获取文件的MIME类型?我正在用C ++编写IIS扩展,所以它必须可以从C ++中调用,如果有一些功能暴露,我确实可以访问IIS。显然,IIS本身必须能够做到这一点,但我的谷歌搜索一直无法找到如何。我确实在SO上找到了this .net相关问题,但这并没有给我太多希望(因为那里既没有提到好的解决方案也没有提到C ++解决方案)。

我需要它,所以我可以使用我的应用程序中的相应内容类型来提供动态文件。我的计划是首先查看我的应用程序中的MIME类型列表,然后回退到系统的MIME类型列表(但是这样可行;显然它存在,因为它是文件与程序关联的方式)。在某些情况下,我只有一个文件扩展名可以使用,但在其他情况下,我可能有一个实际的磁盘文件要检查。由于这些不是用户上传的文件,我相信我可以信任扩展,我更喜欢仅扩展的查找解决方案,因为它看起来更简单,更快。谢谢!

3 个答案:

答案 0 :(得分:13)

HKCR\\.<ext>\Content Type(其中“ext”是文件扩展名)通常包含MIME类型。

答案 1 :(得分:0)

http://www.snoyman.com/blog/2012/03/ie-mimetype-png.html粘贴:

#include <urlmon.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
    char buff[256];
    LPWSTR out;

    FILE *in = fopen("title.png", "rb");

    fread(buff, 1, 256, in);

    FindMimeFromData(NULL, NULL, buff, 256, NULL, FMFD_DEFAULT, &out, 0);

    printf("%ls\n", out);

    return 0;
}

答案 2 :(得分:0)

在Windows 10中,不同的MIME类型存储在注册表中的以下位置:

if let

在该键下具有每种内容类型的键(例如HKEY_CLASSES_ROOT\MIME\Database\Content Type )。