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路径不兼容吗?
通常不,它不受支持. \\?\是低级文件I/O API的一个特性,而不是更高级别的Shell API. \\?\不代表Shell命名空间.
更新:对于将长文件路径解析为PIDL的操作,您可能需要手动将路径字符串分成单独的部分,并根据需要IShellFolder直接使用它们递归地将每个路径字符串解析为父/子PIDL .如果没有别的,这将帮助您确定哪个子文件夹中断了解析,然后您可以向用户报告:"抱歉,达到了Windows路径长度限制,无法使用路径XXX下面的文件/文件夹".
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |