I can't seem to find the answer to this in MSDN. I'm curious, if I have something like this:
LPITEMIDLIST pidl = NULL;
HRESULT hr = SHParseDisplayName(L"\\\\?\\C:\\Users\\Name\\Folder", NULL, &pidl, 0, NULL);
It fails with HRESULT
set to E_INVALIDARG
. The issue goes away if I supply the path as "C:\\Users\\Name\\Folder"
, which is limited only to MAX_PATH
characters.
Are those Shell APIs not compatible with long Unicode paths?
Typically no, it is not supported. \\?\
is a feature of the lower level file I/O API, not the higher level Shell API. \\?\
does not represent a Shell namespace.
Update: For something like parsing a long file path into a PIDL, you may need to manually divide the path string into its individual pieces and use IShellFolder
directly to parse each one into parent/child PIDLs recursively as needed. If nothing else, that will help you identify which subfolder breaks the parsing, then you can report that to the user: "sorry, Windows path length limitation reached, cannot work with files/folder underneath path XXX".