2013-11-09 5 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   */ 
    } 
} 

команда Scan возвращают вектор FileStruct (Directory и WIN32_FIND_DATA) и вектор Directorys, но мне нужно, чтобы сканировать все Directorys, пример:

«C: \» программа просканирует это и вернуть все каталоги на «C: \», прежде чем я сканирую все каталоги в этом, но я не знаю, что мне нужно сделать, чтобы сделать это. Сканирование всех каталогов в каталогах «C: \», посмотрите на этот список, например:

  1. C: \ {OK}
  2. C: \ Files {OK}
  3. C: \ Files \ Первый файл {Не могу}
  4. C: \ Files \ First File \ Second File {Can not}

ответ

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); 
     } 
    } 
} 
Смежные вопросы