1. 程式人生 > >MFC獲取資料夾下所有檔案的名字ListBox

MFC獲取資料夾下所有檔案的名字ListBox

臨時用到,就寫了一下,儲存一下成果!

基於List Box的介面顯示檔名列表:


執行效果圖:


具體實現主要是新增兩個訊息響應,一個BUTTON控制元件的,一個是ListBox控制元件的LBS_SELCHANGE訊息訊息響應;

程式碼很簡單,如下:

void CAddMtpDlg::OnBnClickedBtnimportdata()
{
CFileDialog dlg(TRUE,NULL,NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST,"資料包檔案 (*.mtp)|*.mtp|所有檔案|*.*||",this);
if(dlg.DoModal()!=IDOK) return;
CFileFind ff;
CString szDir=dlg.GetPathName();
    m_sFilePath=szDir;         //注意地址
int iEndPos = 0;  
iEndPos = szDir.ReverseFind('\\');  
szDir = szDir.Left(iEndPos); 
szDir +="\\*.mtp";


BOOL bfile;
bfile=ff.FindFile(szDir);
while (bfile){   
bfile=ff.FindNextFile();
if (ff.IsArchived() && !ff.IsDots()) {
m_listFile.AddString(ff.GetFileName());
}
}
ff.Close();
}




void CAddMtpDlg::OnLbnSelchangelistImportData()
{     
 static int nSelIndexLast;                    //儲存上次的選擇
 int nIndex;                                  //用於指定被選中項索引號的INT變數    
 nIndex=0;
 nIndex=m_listFile.GetCurSel();               //獲取ListBox中選中項的索引號  
 m_listFile.GetText(nIndex,m_sSelect);        //將選中項索引號傳入GetText函式中,把選中項內容賦給m_filename變數 
 nSelIndexLast=nIndex;
 MessageBox(m_sSelect,_T("您選擇的是"),MB_OK);
 
}

其他借鑑:

http://blog.csdn.net/houjixin/article/details/8525788#

遍歷一個資料夾下面的所有檔案MFC版本 - 小 樓 一 夜 聽 春 雨 - 部落格園
http://www.cnblogs.com/kex1n/archive/2011/11/22/2258773.html

1、獲取路徑:通過CFileDialog獲取資料夾的路徑,以及資料夾下面的一個檔案

  1. OnBnClickedBtnOpenfile()  
  2. {  
  3.     // TODO: Add your control notification handler code here    
  4.     CFileDialog dlg(TRUE);///TRUE為OPEN對話方塊,FALSE為SAVE AS對話方塊
  5.     CString csDirParth;  
  6.     if(dlg.DoModal()==IDOK)  
  7.         m_csFileName = dlg.GetPathName();  
  8.     else
  9.         m_csFileName.Empty();  
  10.     int iEndPos = 0;  
  11.     iEndPos = m_csFileName.ReverseFind('\\');  
  12.     csDirParth = m_csFileName.Left(iEndPos);  
  13.     m_FileList.clear();  
  14.     GetFileFromDir(csDirParth);  
  15. }  


2、下面的程式碼可以獲取路徑csDirPath下的txt檔案,並將所有的txt檔名儲存在vector<CString>型別的變數m_FileList中;

  1. GetFileFromDir(CString csDirPath)  
  2. {  
  3.     csDirPath+="\\*.txt";  
  4.     HANDLE file;  
  5.     WIN32_FIND_DATA fileData;  
  6.     char line[1024];  
  7.     char fn[1000];  
  8.     //mbstowcs(fn,csDirPath.GetBuffer(),999);
  9.     file = FindFirstFile(csDirPath.GetBuffer(), &fileData);  
  10.     m_FileList.push_back(fileData.cFileName);  
  11.     bool bState = false;  
  12.     bState = FindNextFile(file, &fileData);  
  13.     while(bState){  
  14.         //wcstombs(line,(const char*)fileData.cFileName,259);
  15.         m_FileList.push_back(fileData.cFileName);  
  16.         bState = FindNextFile(file, &fileData);  
  17.     }  
  18. }