Windows Shell API是否适用于长Unicode路径?

c00*_*0fd 1 c++ winapi windows-shell

我似乎无法在MSDN中找到答案.我很好奇,如果我有这样的事情:

LPITEMIDLIST pidl = NULL;
HRESULT hr = SHParseDisplayName(L"\\\\?\\C:\\Users\\Name\\Folder", NULL, &pidl, 0, NULL);
Run Code Online (Sandbox Code Playgroud)

HRESULT设置为失败E_INVALIDARG.如果我提供路径"C:\\Users\\Name\\Folder",那么问题就会消失,因为路径仅限于MAX_PATH字符.

这些Shell API与长Unicode路径不兼容吗?

Rem*_*eau 7

通常不,它不受支持. \\?\是低级文件I/O API的一个特性,而不是更高级别的Shell API. \\?\不代表Shell命名空间.

更新:对于将长文件路径解析为PIDL的操作,您可能需要手动将路径字符串分成单独的部分,并根据需要IShellFolder直接使用它们递归地将每个路径字符串解析为父/子PIDL .如果没有别的,这将帮助您确定哪个子文件夹中断了解析,然后您可以向用户报告:"抱歉,达到了Windows路径长度限制,无法使用路径XXX下面的文件/文件夹".