CFileDialog选择多个文件

依然范特西╮ 提交于 2019-12-05 19:23:14

转自:http://my.csdn.net/shuting_guo/code/detail/8522

C++代码:

//同时打开N个文件
void COpenNFileDlg::OnButton1() 
{
    CString pathName,fileName,fileTitle;
 
    char* filters = _T("PCM文件(*.pcm)|*.pcm");
 
    //创建一个可以选择多个文件的CFileDialog
    CFileDialog fileDlg(true,NULL,"*.pcm",OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_HIDEREADONLY,filters);
     
    //最多可以打开500个文件
    fileDlg.m_ofn.nMaxFile = 500 * MAX_PATH;
     
    char* ch = new TCHAR[fileDlg.m_ofn.nMaxFile];
    fileDlg.m_ofn.lpstrFile = ch;
 
    //对内存块清零
    ZeroMemory(fileDlg.m_ofn.lpstrFile,sizeof(TCHAR) * fileDlg.m_ofn.nMaxFile);
 
    //显示文件对话框,获得文件名集合
    if(fileDlg.DoModal() == IDOK){
         
        //获取第一个文件的位置
        POSITION pos_file;
        pos_file = fileDlg.GetStartPosition();
         
        //用CString数组存放文件的路径
        CArray<CString, CString> ary_filename;
        //存放文件的标题
        CArray<CString, CString> ary_fileTitle;
 
        //循环读出每个路径并存放在数组中
        while(pos_file != NULL){
             
            //将文件路径存放在数组中
            pathName = fileDlg.GetNextPathName(pos_file);
            ary_filename.Add(pathName);
             
            //获取文件名 
            //从字符串的后面往前遍历,如果遇到'\'则结束遍历,'\'右边的字符串则为文件名
            int length = pathName.GetLength();      
            for(int i = length -1; i>0;i--)
            {
                if('\' == pathName. GetAt(i))
                {//判断当前字符是否是'\'
                    fileName = pathName.Right(length - i -1);
                    break;//跳出循环
                }
            }//endfor
 
            //获取文件名(不包含后缀)
            //采用CString的Left(int count)截取CString中从左往右数的count个字符
            //fileName.GetLength()-4中的4表示".dat"四个字符
 
            fileTitle = fileName.Left(fileName.GetLength()-4);
            //AfxMessageBox(fileTitle);
            ary_fileTitle.Add(fileTitle);//将文件名(不包含后缀)添加到数组中
        }       
    }
    delete[] ch;
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!