MFC中使用CFileDialog可以批量選擇文件的方法

//同時打開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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章