我正在开发文件管理器应用程序,并且注意到某些功能不适用于以空格符号结尾的现有文件夹。例如“ E:\ 1 \”。这并非特定于此特定文件夹,而是确实适用于任何以空格作为文件夹名称最后一个字符的人。对于此类文件夹,SHParseDisplayName
返回ERROR_FILE_NOT_FOUND
。
我从C ++像这样打电话给SHParseDisplayName
:
ITEMIDLIST* idPtr = nullptr;
const auto result = SHParseDisplayName(L"E:\\1 \\",nullptr,&idPtr,nullptr);
documentation没有指定任何边缘情况,也没有指定对输入路径进行预处理的任何方式。无论如何,我尝试用引号将其修饰:
SHParseDisplayName(L"\"E:\\1 \\\"",nullptr);
并提供UNC路径:
SHParseDisplayName(L"\\\\?\\E:\\1 \\",nullptr);
两者均产生E_INVALIDARG
。
值得注意的是:SHParseDisplayName
对于嵌套在该文件夹中的项目确实可以正常工作,例如。 G。 L"E:\\1 \\some_internal_folder\\"
,而不是名称本身以空格结尾的文件夹。
有什么解决方法吗? Windows资源管理器似乎可以很好地使用此类文件夹(就像人们期望的那样)。
此外,SHParseDisplayName
并不是唯一对此类文件夹失败的Windows API函数。相同行为的另一个示例是ILCreateFromPathW
。