在 Windows Shell API 中,有没有办法将 解析的文件名 转换为 显示文件名,反之亦然?
例如,我有一个位于外部存储上的 IDL,解析为以下解析名称:
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_05ac&pid_12a8&mi_00#7&1a2090a1&0&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{10004,Internal Storage,64000000000}\{00000250-0000-0000-5002-000000000000}\{000002A2-0000-0000-A202-000000000000}
我可以从同一个 IDL 获取以下显示名称:
This PC\Apple iPhone\Internal Storage\202212__\IMG_3295.MOV
现在我想替换上面的扩展:
This PC\Apple iPhone\Internal Storage\202212__\IMG_3295.JPG
并检查我的外部存储中是否存在修改后的文件名,如果存在,则获取匹配的文件IDL。最好的方法是有一个函数,如果文件存在,则将显示名称转换为有效的解析名称,如果文件不存在,则返回错误。
考虑到性能很重要,有没有办法做到这一点,如果可能的话,以简单的方式(例如,不在打开的文件迭代器中进行迭代)?
这是伪代码
IShellItem* pItem = nullptr;
hr = SHCreateItemFromParsingName(L"MyParsingPATH\\PARSING_NAME", NULL, IID_PPV_ARGS(&pItem));
if (SUCCEEDED(hr))
{
LPWSTR pDisplayName = nullptr;
hr = pItem->GetDisplayName(SIGDN_NORMALDISPLAY, &pDisplayName);
if (SUCCEEDED(hr))
{
// ...
}
}