所以我刚刚读了这篇文章: http: //msdn.microsoft.com/en-us/library/windows/desktop/aa365247 (v=vs.85).aspx我担心我的程序在某些情况下可能会崩溃。我的意思是那些扩展长度的路径。例如,SHGetPathFromIDList 会返回超过 MAX_PATH 限制的路径吗?并且返回的这样的缓冲区也会以 "\?\" 开头吗?或者此前缀仅用于创建文件或文件夹而不用于返回实际路径?此外,如果这是真的,有没有办法从它对应的 PIDL 中检索路径字符串长度?在创建路径超过 MAX_PATH 限制的文件夹或文件时,我还应该关注 GetVolumeInformation 函数的 lpMaximumComponentLength 参数吗?C++ 文件 I/O 类(std::fstream 类)也会接受这样的路径和 UNC 路径吗?我正在使用 wchars。
LB_DIR 是否支持扩展长度路径的另一个问题?
这是我认为可能会出现问题的代码示例:
case IDC_BOWSE:
{
WCHAR Path[MAX_PATH]; //Triggers an error in extended-length path ??
//char FolderName[MAX_PATH];
BROWSEINFO OpenStruct;
memset(&OpenStruct, 0, sizeof(BROWSEINFO));
OpenStruct.hwndOwner = hWnd;
OpenStruct.pidlRoot = NULL;
//OpenStruct.pszDisplayName = FolderName;
OpenStruct.lpszTitle = L"Some:";
OpenStruct.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_VALIDATE | BIF_NONEWFOLDERBUTTON | BIF_BROWSEINCLUDEFILES ;
DWORD msg;
if(SHGetPathFromIDList(SHBrowseForFolder(&OpenStruct), Path))
{
SetWindowText(GetDlgItem(hWnd, IDC_FILE), Path);
}
}
break;
//其他例子:
std::wstringstream ssTextureDataFolderPath;
ssTextureDataFolderPath << sOutPutPath << L"\\TexturesData";
if(!CreateDirectory(ssTextureDataFolderPath.str().c_str(), NULL) && GetLastError() != ERROR_ALREADY_EXISTS)
return false;
如果路径超过 MAX_PATH 限制,我是否应该检查 GetVolumeInformation 函数的 lpMaximumComponentLength 参数以匹配组件长度?
提前致谢!