【MFC】获取文件路径和文件夹路径

发布时间 2023-08-03 08:22:00作者: Koshkaaa

MFC的界面中,需要实现这样两个功能:

1、在界面上加一个按钮,单击按钮弹出一个对话框选择文件,在工程中获得文件的路径;

2、在界面上加一个按钮,单击按钮弹出一个对话框选择文件夹,在工程中获取文件夹的路径。

一、获取文件路径

// -- 按钮的消息响应函数
void CDialogSampled::OnBnClickedButtonOpen()
{
    // TODO: 在此添加控件通知处理程序代码
    CString m_strFilePath = _T("");

    //获取文件路径名
    LPCTSTR szFilter =_T("TXT(*.txt)|*.txt|LOG(*.log)|*.log|ALLSUPORTFILE(*.*)|*.*||");
    CFileDialog dlgFileOpenImg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,NULL);
    //打开txt文件
    if(dlgFileOpenImg.DoModal() == IDOK)
    {
        //读取文件名
        m_strFilePath = dlgFileOpenImg.GetPathName();
    }
    else
    {
        return;
    }
}

二、获取文件夹路径

//选择保存路径
void CDialogSampled::OnBnClickedButtonSavePathSelect()
{
    // TODO: 在此添加控件通知处理程序代码
    CString m_saveFilePath;
    //打开文件,获取文件路径名
    TCHAR szPath[_MAX_PATH];  
    BROWSEINFO bi;  
    bi.hwndOwner = GetSafeHwnd();  
    bi.pidlRoot = NULL;  
    bi.lpszTitle = "Please select the input path";  
    bi.pszDisplayName = szPath;  
    bi.ulFlags = BIF_RETURNONLYFSDIRS;  
    bi.lpfn = NULL;  
    bi.lParam = NULL;  

    LPITEMIDLIST pItemIDList = SHBrowseForFolder(&bi);  

    if(pItemIDList)  
    {  
        if(SHGetPathFromIDList(pItemIDList,szPath))  
        {  
            m_saveFilePath = szPath;  
            m_saveFilePath = m_saveFilePath+"\\";
        }  

        //use IMalloc interface for avoiding memory leak  
        IMalloc* pMalloc;  
        if( SHGetMalloc(&pMalloc) != NOERROR )  
        {  
            TRACE(_T("Can't get the IMalloc interface\n"));  
        }  

        pMalloc->Free(pItemIDList);  
        if(pMalloc)  
            pMalloc->Release();  
        UpdateData(FALSE);  
    }  
}