创造一个CFileDialog的对象后,如何得到当前打开目录的路径?
我查过MSDN,CFileDialog::GetPathName函数可以返回一个selected file的路径
但是如果我没有选择任何一个file呢?如何得到当前目录的路径?
我查过MSDN,CFileDialog::GetPathName函数可以返回一个selected file的路径
但是如果我没有选择任何一个file呢?如何得到当前目录的路径?
BROWSEINFO bf;
LPITEMIDLIST pidlbf;
ZeroMemory((LPVOID)&bf,sizeof(BROWSEINFO));
bf.hwndOwner=this->m_hWnd;
bf.pszDisplayName=m_path.GetBuffer(MAX_PATH);
bf.lpszTitle=_T("选择打开位置");
bf.ulFlags=BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
bf.lpfn=NULL;
bf.lParam=0;
if((pidlbf=::SHBrowseForFolder(&bf))==NULL) return;
char temp[MAX_PATH];
if(::SHGetPathFromIDList(pidlbf,temp)==NULL)return;
m_path.Format(temp);
TCHAR szDisplayName[MAX_PATH];
LPITEMIDLIST pidl;
ZeroMemory(&bi, sizeof(bi));
szDisplayName[0] = '\0';
bi.hwndOwner = NULL;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDisplayName;
bi.lpszTitle = TEXT("");
bi.ulFlags = BIF_EDITBOX | BIF_VALIDATE;//BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;//BIF_EDITBOX | BIF_VALIDATE ;
#ifndef SHOW_PROBLEM
bi.lpfn = BrowseCallbackProc;
#endif
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);
if (NULL != pidl)
{
SHGetPathFromIDList(pidl,szDisplayName);//此处szDisplayName为文件夹路径
}
{
switch (uMsg)
{
case BFFM_VALIDATEFAILED:
return 1;
default:
return 0;
}
}
path = fDlg.GetPathName() ;
SHBrowseForFolder和SHGetPathFromIDList这两个函数
CFileDialog dlg(TRUE,"All File(*.*)|*.*|",NULL,OFN_HIDEREADONLY,NULL,NULL);
if(IDOK == dlg.DoModal())
{
CString strPath ;
strPath = dlg.GetPathName() ;
int nPos = strPath.ReverseFind('\\');
strPath = strPath.Left(nPos);//strPath 即为该文件所在文件夹路径.
}