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 的向量(目录和 WIN32_FIND_DATA)和目录的向量,但我需要扫描所有目录,例如:

“C:\”程序扫描这个并返回“C:\”上的所有目录,在我扫描这个里面的所有目录之前,但我不知道我必须做什么才能让它扫描“C:\”上的所有目录:\" 目录,例如查看此列表:

  1. C:\ {确定}
  2. C:\文件 {OK}
  3. C:\Files\First File {不能}
  4. C:\Files\First File\Second File {不能}
4

2 回答 2

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);
        }
    }
}
于 2013-11-09T16:57:26.237 回答
0

您必须为CompleteScan找到的每个目录递归调用您的函数。

于 2013-11-09T16:34:23.917 回答