妥善处理好代码书写过程中关于路径中分隔符“/”的方方面面
一、GetCurrentDirectory得到当前目录,并生成心意的全路径
char chCurPath[MAX_PATH] = {0};
::GetCurrentDirectory(MAX_PATH, (LPTSTR)chCurPath);
注意:如果获取的路径是根目录的话,例:C:/ ,D:/ ,A:/ ,那么我们在生成全路径时,不用加“//”转意
如果获取的是其它路径,例:C:/WINDOWS , C:/MyFolder ,那么我们在生成全路径时,必须注意加上转意符“//”
二、《浏览计算机》 对话框获取的全路径,同样适用于上述描述,实际使用时一定要注意“//”,应给予特殊处理
BROWSEINFO bi; //BROWSEINFO 结构,包含有用户选中目录的重要信息
TCHAR Buffer[512] = {0};
TCHAR FullPath[512] = {0};
bi.hwndOwner = m_hWnd; //m_hWnd程序主窗口句柄
bi.pidlRoot = NULL;
bi.pszDisplayName = Buffer; //用户选择的存储路径的缓冲区
bi.lpszTitle = "请选择数据文件存储的路径"; //《浏览计算机》对话框的文字提示
bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_BROWSEFORCOMPUTER ; //只返回目录。其他标志看MSDN
bi.lpfn = NULL; //回调函数,有时很有用
bi.lParam = 0;
bi.iImage = 0;
ITEMIDLIST * pidl = ::SHBrowseForFolder(&bi); //显示弹出窗口,ITEMIDLIST很重要
if( ::SHGetPathFromIDList (pidl, FullPath) ) //在ITEMIDLIST中得到目录名的全路径
{
//FullPath就是你选择的全路径
}
else
{
//没有获取到任何路径
}
注意:我目前的办法是如果,获取的全路径字符数 > 3,应在路径后面加上转意符“//”再形成自己可心意的全路径
三、GetModuleFileName 得到当前模块的运行目录,也要注意上述问题
char chRunPath[MAX_PATH] = "/0";
GetModuleFileName(NULL, chRunPath, _MAX_DIR);