0

所以我刚刚读了这篇文章: 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 参数以匹配组件长度?

提前致谢!

4

0 回答 0