本身总结了磁盘路径下的文件遍历供你们分享,遍历有深度和广度之分,而,对于路径较长的遍历,无疑广度是最佳选择,深度遍历的递归性消耗大量的资源占用。而广度则为优选。 数据结构
深度递归遍历为在指定路径下,加上\*进行遍历,遇到文件夹后,则进入文件夹内进行新的遍历,直到文件夹下全是文件,各类递归,完成。 函数
广度遍历则是在遍历指定路径下文件后,进行遍历遇到文件夹进行压栈,而后继续循环在本文件夹下完成后,再从栈中取出文件夹进行层层遍历,最后,完成。 spa
主要的函数,数据结构:WIN32_FIND_DATA ,FindFirstFile(), FindNextFile(); code
递归遍历: 递归
void MyFindFile(const char *pFileName, char* pext = ".*") { char szFile[MAX_PATH*100]; char szTmp[MAX_PATH]; char szPath[MAX_PATH*100]; WIN32_FIND_DATA find_data; strcpy(szPath,pFileName); strcpy(szFile,szPath); strcat(szFile,"\\*"); strcat(szFile, pext); //C:\Documents and Settings\Administrator\◊¿√Ê\machfe\*.txt HANDLE hHandle = FindFirstFile(szFile, &find_data); if(hHandle!= NULL ) { do{ if(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { if(find_data.cFileName[0] != '.') { strcpy(szTmp,szPath); strcat(szTmp,"\\"); strcat(szTmp, find_data.cFileName); //Sleep(100); MyFindFile(szTmp); } } else { printf("%s//%s\n", szPath, find_data.cFileName); //Sleep(100); } }while(FindNextFile(hHandle,&find_data) ); FindClose(hHandle); } }
广度遍历: 资源
void BreathFindFile(const char *pFileName, char* pext = ".*") { char szFile[MAX_PATH]; char szTmp[MAX_PATH]; char szPath[MAX_PATH]; //µ±«∞…®√Ë∏˘¬∑æ∂ CStringList strStact; WIN32_FIND_DATA find_data; strcpy(szPath,pFileName); do{ strcpy(szFile,szPath); strcat(szFile,"\\*"); strcat(szFile, pext); HANDLE hHandle = FindFirstFile(szFile, &find_data); if(hHandle!= NULL ) { do{ if(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { if(find_data.cFileName[0] != '.') { strcpy(szTmp,szPath); strcat(szTmp,"\\"); strcat(szTmp, find_data.cFileName); strStact.AddTail(szTmp); } } else { printf("%s//%s\n", szPath, find_data.cFileName); } }while(FindNextFile(hHandle,&find_data) ); FindClose(hHandle); } if( strStact.IsEmpty() ) { break; } else { CString strTmp = strStact.GetTail(); strStact.RemoveTail(); strcpy(szPath, strTmp.GetBuffer(0)); strTmp.ReleaseBuffer(); } }while (TRUE); }