2013-11-09 62 views
0

我需要做一個掃描類型,我已經完成了第一部分,程序將掃描目錄通知,並從其他目錄中分離文件,但我也需要掃描其他目錄,看看我的代碼:如何掃描目錄樹?

void CompleteScan(const char root[], WCHAR *Extension,std::vector<FileStruct> &Return_Files,std::vector<WIN32_FIND_DATA> &Return_Directorys){ 
std::vector<FileStruct> files; 
std::vector<WIN32_FIND_DATA> dir; 

Scan(root, Extension, files, dir); 

if(dir.size() > 0){ 
    for(int i = 0; i < dir.size(); i++){ 
     /*   Here is directory by directory scan   */ 
    } 
} 

命令掃描返回FileStruct組成的矢量(目錄和WIN32_FIND_DATA)和Directorys組成的矢量,但我需要掃描所有Directorys,實施例:

「C:\」的節目掃描此並返回所有的導演「C:\」之前,我掃描了所有導演之前,但我不知道該怎麼做才能掃描「C:\」導演的所有導演,請看這個列表,例如:

  1. C:\【OK】
  2. C:\文件【OK】
  3. C:\文件\第一個文件{無法}
  4. C:\文件\第一個文件\第二個文件{不能}

回答

0

你必須遞歸地調用你的CompleteScan函數找到每個目錄。

0

遞歸!如果我放棄了任何標點符號,請原諒;我沒有Windows框進行編譯/測試。

/** 
* @brief Accumulates the files and directories under the given root directory 
* into the output vectors allfiles and alldirs that you provide. 
**/ 
void CompleteScan(const char root[], 
        WCHAR *Extension, 
        std::vector<FileStruct> &allfiles, 
        std::vector<WIN32_FIND_DATA> &alldirs) 
{ 
    std::vector<WIN32_FIND_DATA> subdirs; 

    // Assuming your Scan function does what needs to be done with the allfiles 
    // vector. If not, more code needed somewhere here to handle that. 
    Scan(root, Extension, allfiles, subdirs); 

    if(dir.size() > 0){ 
     for(int i = 0; i < dir.size(); i++){ 
      // Visit this directory 
      alldirs.push_back(dir); 
      // Visit all descendant directories 
      CompleteScan(dir.cFileName, Extension, allfiles, alldirs); 
     } 
    } 
}