[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)这样的函数来

posted on 2011-02-18 10:09  carekee  阅读(3836)  评论(0编辑  收藏  举报