[VC]“打开文件夹”对话框并获得文件夹的全路径
view plaincopy to clipboardprint?
01.BROWSEINFO bBinfo;
02.memset(&bBinfo, 0, sizeof(BROWSEINFO));
03.bBinfo.hwndOwner = m_hWnd;
04.bBinfo.lpszTitle = _T("请选择路径: ");
05.bBinfo.ulFlags = BIF_RETURNONLYFSDIRS;
06.char strTmp[255];
07.sprintf(strTmp,"");
08.LPITEMIDLIST lpDlist;
09.lpDlist = SHBrowseForFolder(&bBinfo) ;
10.if ( lpDlist != NULL )
11.{
12. SHGetPathFromIDList(lpDlist, strTmp);//把项目标识列表转化成目录
13. TRACE(strTmp);
14. m_strOutputPath=strTmp;
15.}
BROWSEINFO bBinfo;
memset(&bBinfo, 0, sizeof(BROWSEINFO));
bBinfo.hwndOwner = m_hWnd;
bBinfo.lpszTitle = _T("请选择路径: ");
bBinfo.ulFlags = BIF_RETURNONLYFSDIRS;
char strTmp[255];
sprintf(strTmp,"");
LPITEMIDLIST lpDlist;
lpDlist = SHBrowseForFolder(&bBinfo) ;
if ( lpDlist != NULL )
{
SHGetPathFromIDList(lpDlist, strTmp);//把项目标识列表转化成目录
TRACE(strTmp);
m_strOutputPath=strTmp;
}
此时得到的文件夹的路径可能有两种不同的结果:
(1)如果你选择的是某一个盘的根目录,得到"C:\",即在字符串的末尾存在一个"\";
(2)如果你选择的是某盘下的某个文件夹,得到"C:\somefoder\subfoder",即字符串的末尾不是"\"。
如果你输入了一个文件名,想在该文件夹下创建/打开这个文件,则你需要生成文件的全路径,需要对上面两种情况分别对待,可以通过如下的代码来处理:
view plaincopy to clipboardprint?
01.CString strOutputFullPath = _T("");
02.if (m_strOutputPath.Right(1) == _T("\\")) // 得到如C:\这样的路径
03.{
04. strOutputFullPath = m_strOutputPath + m_strFileName + _T(".cde");
05.}
06.else // 得到如C:\abc这样的路径
07.{
08. strOutputFullPath = m_strOutputPath + _T("\\") + m_strFileName + _T(".cde");
09.}
CString strOutputFullPath = _T("");
if (m_strOutputPath.Right(1) == _T("\\")) // 得到如C:\这样的路径
{
strOutputFullPath = m_strOutputPath + m_strFileName + _T(".cde");
}
else // 得到如C:\abc这样的路径
{
strOutputFullPath = m_strOutputPath + _T("\\") + m_strFileName + _T(".cde");
}
我们可以在此基础上重构出DirectoryCombine(CString FolderPath, CString FileName, CString FormatName)这样的函数来