/*刷新檔案*/ void CModel::OnBnClickedButton1() { ModelCount = 0; //刪除所有列表 m_ModelList.DeleteAllItems(); //找到該exe目錄 CString path; GetModuleFileName(NULL, path.GetBufferSetLength(MAX_PATH + 1), MAX_PATH); path.ReleaseBuffer(); int pos = path.ReverseFind('\\'); path = path.Left(pos) + _T("\\Temp\\"); LPTSTR lpszText = new TCHAR[path.GetLength() + 1]; lstrcpy(lpszText, path); //陣列清除 AllModelName.clear(); //搜尋檔案 ListAllFileInDirectory(lpszText, TEXT("*_*_*_*_*.mod")); }
/*搜尋檔案名*/ BOOL CModel::ListAllFileInDirectory(LPTSTR szPath, LPTSTR szName) { HANDLE hListFile; TCHAR szFilePath[MAX_PATH]; //檔案名 TCHAR szFullPath[MAX_PATH]; //檔案目錄 WIN32_FIND_DATA FindFileData; lstrcpy(szFilePath, szPath); lstrcat(szFilePath, szName); hListFile = FindFirstFile(szFilePath, &FindFileData); if (hListFile == INVALID_HANDLE_VALUE) { MessageBox(_T("無檔案")); return 1; } else { do { if (lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName, TEXT("..")) == 0) continue; wsprintf(szFullPath, L"%s\\%s", szPath, FindFileData.cFileName);//將szPath和FindFileData.cFileName 字串相加放到szFullPath裡 /*名稱陣列*/ AllModelName.push_back(FindFileData.cFileName); /*列表顯示*/ m_ModelList.InsertItem(ModelCount, NULL); CString StrBuff; (ModelCount>9) ? StrBuff.Format(_T("0%d"), ModelCount) : StrBuff.Format(_T("00%d"), ModelCount); m_ModelList.SetItemText(ModelCount, 0, StrBuff); m_ModelList.SetItemText(ModelCount, 1, AllModelName.at(ModelCount).Left(AllModelName.at(ModelCount).Find(_T(".")))); /*檔案計數*/ ModelCount++; if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {//如果目錄下還有目錄繼續往下尋找 //printf("<DIR>"); ListAllFileInDirectory(szFullPath, szName); } } while (FindNextFile(hListFile, &FindFileData)); } return 0; }
/******************************************** *DWORD ListAllFileInDirectory(LPSTR szPath) * 功能: 遍历目录及所有子目录,打印路径 * 参数: LPSTR szPath, 为将遍历的目录 * 返回值:0 执行完成, 1 发生错误 ********************************************/ DWORD ListAllFileInDirectory(LPSTR szPath2,int nTabs) { CHAR szFilePath[MAX_PATH]; WIN32_FIND_DATA FindFileData; HANDLE hListFile; CHAR szFullPath[MAX_PATH]; //完整路径 卷标+目录+文件名 //构造代表子目录和文件的路径字符串 通配符* lstrcpy(szFilePath,szPath2); lstrcat(szFilePath,"\\*"); //查找第一个文件目录,获得查找句柄 hListFile=FindFirstFile(szFilePath,&FindFileData); if(hListFile==INVALID_HANDLE_VALUE) { printf("ERROR :%d",(int)GetLastError()); return 1; } else { do { //过滤 .和.. 不需要遍历 if(lstrcmp(FindFileData.cFileName,TEXT("."))==0 || lstrcmp(FindFileData.cFileName,TEXT(".."))==0) { continue; } //构造成全路径 wsprintf(szFullPath,"%s\\%s", szPath2,FindFileData.cFileName); //打印 //若是文件就打印,若是目录就打印并递归到子目录 if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { for(int i=1;i<nTabs;i++) { printf("%s",V_line); //输出一个 竖直线 } printf("%s",B_line); //输出一个 水平线 printf("%s\n",FindFileData.cFileName); } //若为目录则递归调用 列举下级目录 if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { for(int i=1;i<nTabs;i++) { printf("%s",V_line); //输出一个 竖直线 } printf("%s",B_line); //输出一个 水平线 printf("%s\n",FindFileData.cFileName); ListAllFileInDirectory(szFullPath,nTabs+1); } } while(FindNextFile(hListFile,&FindFileData)); } return 0; }