本身總結了磁盤路徑下的文件遍歷供你們分享,遍歷有深度和廣度之分,而,對於路徑較長的遍歷,無疑廣度是最佳選擇,深度遍歷的遞歸性消耗大量的資源佔用。而廣度則爲優選。 數據結構
深度遞歸遍歷爲在指定路徑下,加上\*進行遍歷,遇到文件夾後,則進入文件夾內進行新的遍歷,直到文件夾下全是文件,各類遞歸,完成。 函數
廣度遍歷則是在遍歷指定路徑下文件後,進行遍歷遇到文件夾進行壓棧,而後繼續循環在本文件夾下完成後,再從棧中取出文件夾進行層層遍歷,最後,完成。 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); }