轉載:http://www.cnblogs.com/chenkunyun/archive/2012/03/24/2415727.html
方法一、
//遍歷資料夾函式 void TraverseFolder(LPCTSTR lpPath) { TCHAR szFind[MAX_PATH] = {_T("\0")}; WIN32_FIND_DATA findFileData; BOOL bRet; _tcscpy_s(szFind, MAX_PATH, lpPath); _tcscat_s(szFind, _T("\\*.*")); //這裡一定要指明萬用字元,不然不會讀取所有檔案和目錄 HANDLE hFind = ::FindFirstFile(szFind, &findFileData); if (INVALID_HANDLE_VALUE == hFind) { return; } //遍歷資料夾 while (TRUE) { if (findFileData.cFileName[0] != _T('.')) {//不是當前路徑或者父目錄的快捷方式 _tprintf(_T("%s\\%s\n"), lpPath, findFileData.cFileName); if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {//這是一個普通目錄 //設定下一個將要掃描的資料夾路徑 _tcscpy_s(szFind, MAX_PATH, lpPath); _tcscat_s(szFind, _T("\\")); _tcscat_s(szFind, findFileData.cFileName); ///_tcscat_s(szNextDir, _T("\\*")); //遍歷該目錄 TraverseFolder(szFind); } } //如果是當前路徑或者父目錄的快捷方式,或者是普通目錄,則尋找下一個目錄或者檔案 bRet = ::FindNextFile(hFind, &findFileData); if (!bRet) {//函式呼叫失敗 //cout << "FindNextFile failed, error code: " // << GetLastError() << endl; break; } } ::FindClose(hFind); }
方法二、
void CSRCMBugReportDlg::TraverseFolder(LPCTSTR lpPath) { WIN32_FIND_DATA FindFileData; HANDLE hListFile = NULL; TCHAR findPath[MAX_PATH] = { 0 }; TCHAR filePath[MAX_PATH] = { 0 }; memset(findPath, 0, MAX_PATH); memset(filePath, 0, MAX_PATH); lstrcpy(findPath, lpPath); lstrcpy(filePath, lpPath); int len = lstrlen(findPath); if (findPath[len - 1] != _T('\\')) { lstrcat(findPath, _T("\\")); } lstrcat(findPath, _T("*.*")); hListFile = FindFirstFile(findPath, &FindFileData); if (hListFile == INVALID_HANDLE_VALUE) { return; } else { do { if (lstrcmp(FindFileData.cFileName, _T(".")) == 0 || lstrcmp(FindFileData.cFileName, _T("..")) == 0) { continue; } if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) { continue; } if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { int len = lstrlen(filePath); if (filePath[len - 1] != _T('\\')) { lstrcat(filePath, _T("\\")); } lstrcat(filePath, FindFileData.cFileName); //子目錄 TraverseFolder(filePath); } else { int len = lstrlen(filePath); if (filePath[len - 1] != _T('\\')) { lstrcat(filePath, _T("\\")); } lstrcat(filePath, FindFileData.cFileName); //檔案 } memset(&FindFileData, 0, sizeof(WIN32_FIND_DATA)); memset(filePath, 0, MAX_PATH); lstrcpy(filePath, lpPath); } while (FindNextFile(hListFile, &FindFileData)); } ::FindClose(hListFile); }