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

C#中GetDetailsOf方法返回异常标识而非实际值的问题求助

解决GetDetailsOf返回属性标识而非实际值的问题

问题原因

你遇到的问题主要来自两个方面:

  1. 属性索引不匹配:GetDetailsOf的infotype参数对应的属性索引并非固定值,不同Windows版本、语言环境甚至文件夹类型下,同一属性的索引可能存在差异。你传入的索引值可能在当前环境下并不对应目标属性,导致返回属性标识而非实际值。
  2. 路径格式错误:ParseName方法需要传入文件夹内的相对路径,如果传入的是绝对路径,会导致无法正确解析出FolderItem,进而返回异常结果。

解决方案

1. 确认当前环境下的正确属性索引

先遍历所有可能的索引,打印对应的属性名称,找到目标属性的正确索引值:

public void ListAllShellProperties(string folderPath)
{
    var shellAppType = Type.GetTypeFromProgID("Shell.Application");
    dynamic shell = Activator.CreateInstance(shellAppType);
    Shell32.Folder objFolder = shell.NameSpace(folderPath);

    // 遍历0到299的索引,覆盖大部分常见属性
    for (int i = 0; i < 300; i++)
    {
        string propName = objFolder.GetDetailsOf(null, i);
        if (!string.IsNullOrWhiteSpace(propName))
        {
            Console.WriteLine($"索引 {i}: {propName}");
        }
    }
}

调用该方法后,控制台会输出所有可用属性及其对应索引,找到目标属性(比如“Artist”)的索引后,再将其传入getFileDetails方法。

2. 修正路径格式,使用相对路径

修改getFileDetails方法,将绝对路径转换为相对于文件夹的路径:

public string getFileDetails(string fileFolder, string filePath, int infotype)
{
    string strReturnval = null;
    try
    {
        // 转换为文件夹内的相对路径
        string relativePath = Path.GetRelativePath(fileFolder, filePath);
        var shellAppType = Type.GetTypeFromProgID("Shell.Application");
        dynamic shell = Activator.CreateInstance(shellAppType);
        Shell32.Folder objFolder = shell.NameSpace(fileFolder);
        Shell32.FolderItem folderItem = objFolder.ParseName(relativePath);

        if (folderItem != null)
        {
            strReturnval = objFolder.GetDetailsOf(folderItem, infotype);
        }
        else
        {
            Console.WriteLine("无法找到目标文件,请检查路径是否正确");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"错误信息:{ex.Message}");
    }
    finally
    {
        Console.WriteLine($"返回值:{strReturnval}");
    }
    return strReturnval;
}

额外注意事项

  • 确保项目已正确引用Shell32组件:在项目的“引用”中添加COM组件“Microsoft Shell Controls And Automation”。
  • 部分属性仅对特定文件类型有效(比如“Artist”仅对音频文件生效),如果文件类型不匹配,可能返回空值或属性标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:18:18