You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取文件资源管理器Type列的文件类型?能否用C++程序化获取?

如何用C++获取文件资源管理器Type列的内容?

可以,Windows系统下,文件资源管理器Type列的内容来自注册表中文件扩展名关联的友好描述,你可以通过Win32 API的AssocQueryString函数直接获取这个值。

实现要点

  • 依赖Shlwapi库中的AssocQueryString函数,该函数专门用于查询文件类型关联信息
  • 编译时需要链接shlwapi.lib库

代码示例

#include <windows.h>
#include <shlwapi.h>
#include <string>
#include <iostream>

// 自动链接shlwapi库
#pragma comment(lib, "shlwapi.lib")

std::wstring GetFileTypeName(const std::wstring& filePath) {
    wchar_t typeNameBuffer[256] = {0};
    HRESULT queryResult;

    // 优先直接查询文件路径对应的类型描述
    queryResult = AssocQueryStringW(
        ASSOCF_NONE,
        ASSOCSTR_FRIENDLYDOCNAME,
        filePath.c_str(),
        nullptr,
        typeNameBuffer,
        sizeof(typeNameBuffer) / sizeof(wchar_t)
    );

    if (SUCCEEDED(queryResult)) {
        return typeNameBuffer;
    }

    // 直接查询失败时,提取扩展名单独查询
    const wchar_t* fileExt = PathFindExtensionW(filePath.c_str());
    if (fileExt && *fileExt != L'\0') {
        queryResult = AssocQueryStringW(
            ASSOCF_NONE,
            ASSOCSTR_FRIENDLYDOCNAME,
            fileExt,
            nullptr,
            typeNameBuffer,
            sizeof(typeNameBuffer) / sizeof(wchar_t)
        );

        if (SUCCEEDED(queryResult)) {
            return typeNameBuffer;
        }
    }

    // 无匹配类型时返回默认值
    return L"Unknown File";
}

// 测试用例
int main() {
    std::wstring txtFile = L"C:\\example.txt";
    std::wstring jpgFile = L"C:\\photo.jpg";
    
    std::wcout << L"Type of " << txtFile << L": " << GetFileTypeName(txtFile) << std::endl;
    std::wcout << L"Type of " << jpgFile << L": " << GetFileTypeName(jpgFile) << std::endl;
    
    return 0;
}

关键说明

  • ASSOCSTR_FRIENDLYDOCNAME参数指定获取的是友好文档名称,也就是文件资源管理器Type列显示的文本
  • 先尝试直接查询文件路径,适配无扩展名但有类型关联的文件;如果失败,再提取扩展名单独查询
  • 代码使用宽字符版本的API(AssocQueryStringW),避免编码问题

内容的提问来源于stack exchange,提问作者Joe J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:41:06