创造一个CFileDialog的对象后,如何得到当前打开目录的路径?
我查过MSDN,CFileDialog::GetPathName函数可以返回一个selected file的路径
但是如果我没有选择任何一个file呢?如何得到当前目录的路径?

解决方案 »

  1.   

    CString m_path;//当前打开目录路径
    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);
      

  2.   

    BROWSEINFO bi;
    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为文件夹路径
    }
      

  3.   

    int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
    {
    switch (uMsg)
    {
    case BFFM_VALIDATEFAILED:
    return 1;
    default:
    return 0;
    }
    }
      

  4.   

    楼主的意思是CFileDialog打开你自己默认的目录吧
      

  5.   

    CString path;
    path = fDlg.GetPathName() ;
      

  6.   

    如果要得到只选目录,需要用
    SHBrowseForFolder和SHGetPathFromIDList这两个函数
      

  7.   

    我意思是,我调用CFileDialog类产生一个对象后,当前已经打开一个文件夹,要怎样得到现在这个文件夹的路径值,二楼和三楼的方法好像是再生成一个floderbrowser来选择文件夹吧?
      

  8.   

    CFileDialog可以打开文件,不选择文件,没办法取到啊。如果选择后确定,就可以取得这个文件所在路径了。
      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 即为该文件所在文件夹路径.
      }
      

  9.   

    恩,我按照二楼三楼的方法,然后利用FindFirstFile()和FindNextFile(),就可以历遍文件夹了的文件了.Thanks a lot~~~