MFC 利用CFileDialog讀取資料夾和多個檔案
阿新 • • 發佈:2019-01-28
專案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();//獲得了單個檔案的檔名
}
參考資料
這些參考資料這個很好用哦!