路徑下文件遍歷

本身總結了磁盤路徑下的文件遍歷供你們分享,遍歷有深度和廣度之分,而,對於路徑較長的遍歷,無疑廣度是最佳選擇,深度遍歷的遞歸性消耗大量的資源佔用。而廣度則爲優選。 數據結構

深度遞歸遍歷爲在指定路徑下,加上\*進行遍歷,遇到文件夾後,則進入文件夾內進行新的遍歷,直到文件夾下全是文件,各類遞歸,完成。 函數

廣度遍歷則是在遍歷指定路徑下文件後,進行遍歷遇到文件夾進行壓棧,而後繼續循環在本文件夾下完成後,再從棧中取出文件夾進行層層遍歷,最後,完成。 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);

}

}

廣度遍歷: 資源

  1. 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);
    
    
    
    }
相關文章
相關標籤/搜索