1. 程式人生 > >MFC 利用CFileDialog讀取資料夾和多個檔案

MFC 利用CFileDialog讀取資料夾和多個檔案

專案1、彈出選擇視窗,選擇並獲得了多個檔案的檔名(不含路徑)

void CMFrame::OnBnClickedDlginput()
{
	// TODO: 在此新增控制元件通知處理程式程式碼	

	CFileDialog   dlg( TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, NULL, NULL );
   DWORD MAXFILE = 2562; //2562 is the max
   TCHAR* pc = new TCHAR[MAXFILE * (MAX_PATH+1) + 1];
   pc[0] = pc[1] = 0;
   dlg.m_ofn.nMaxFile = MAXFILE;
   dlg.m_ofn.lpstrFile = pc;
   
   int iReturn = dlg.DoModal();
   if(iReturn ==  IDOK)
   {
     int nCount = 0;
     POSITION pos = dlg.GetStartPosition();
     while (pos != NULL)
     {
		
       CString szPathName = dlg.GetNextPathName(pos);///此處取得的檔名帶路徑
	   TRACE( _T("%s\n"), szPathName);
	   
	   CString strName;//檔名,不包含路徑
		//取得檔名
		for(int i=szPathName.GetLength();i>0;i--)
		{
			if(szPathName.GetAt(i)=='\\')
			{
				strName=szPathName.Right(szPathName.GetLength()-i-1);
				TRACE( "%s\n", strName);				
				break;
			}
			
		}		
	  
       nCount++;
     }
     CString str;
     str.Format("Successfully opened %d files\n", nCount);
     AfxMessageBox(str);
   }
   else if(iReturn == IDCANCEL)
     AfxMessageBox("Cancel");

   delete []pc;
}

如果還想要獲取不包含檔名的全路徑,可以新增以下的程式碼

// 獲取不包含檔名的全路徑
	CString strCurPath;    
    GetModuleFileName(NULL, strCurPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);  
    strCurPath.ReleaseBuffer();  
    int nPos = strCurPath.ReverseFind('\\');  
    strCurPath = strCurPath.Left(nPos + 1); 
	TRACE( "%s\n", strCurPath);

專案2、彈出選擇視窗,選擇並獲得了單個檔案的檔名
//彈出選擇視窗,選擇並獲得了單個檔案的檔名
	CFileDialog log(TRUE,"檔案","*.*",OFN_HIDEREADONLY,"FILE(*.*)|*.*||",NULL);
	if(log.DoModal()==IDOK)
	{
	CString filename1=log.GetFileName();//獲得了單個檔案的檔名
	}

參考資料

這些參考資料這個很好用哦!