【问题标题】:How can I scan a directory tree?如何扫描目录树?
【发布时间】:2013-12-02 23:20:39
【问题描述】:

我需要进行一种扫描,我已经完成了第一部分,程序将扫描通知的目录并将文件与其他目录分开,但我还需要扫描其他目录,看看我的代码:

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)的Vector和一个Directorys的Vector,但是我需要扫描所有的Directory,例如:

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

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

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      递归!请原谅我遗漏了任何标点符号;我没有要编译/测试的 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);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-06-16
        • 1970-01-01
        • 2011-06-28
        • 2014-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-23
        相关资源
        最近更新 更多