C++递归遍历文件夹(三)——建立树结构

时间:2022-06-08 12:54:11

补充上篇博客:递归遍历文件夹时,同步在内存中建立相同的树状结构,用来描述所有文件和文件夹的保存结构。

具体实现如下:

// recursion3.cpp

#include <vector>
#include <iostream>
#include <boost/filesystem.hpp>

using namespace std;
using namespace boost::filesystem;

//定义树节点类,存放自己路径和孩子路径
class TreeNode {      
public:
    TreeNode(const path& newPath) 
    {
        filePath = newPath;
    }
    void addChild(TreeNode* child)
    {
        children.push_back(child);
    }
private:
    path filePath;
    vector<TreeNode*> children;
};

void recursion(path src_path, TreeNode& parent)
{
    directory_iterator end;                       
    directory_iterator dir(src_path);                    

    for (dir; dir != end; dir++)
    {
        TreeNode* newNode = new TreeNode(dir->path());   //动态分配一个空间存放树节点类的对象newNode
        parent.addChild(newNode);                        //将对象newNode放进父亲对象
        ofstream outFile("tree.txt",ios::app);
        outFile<<*dir<<endl;                                   
        outFile.close(); 
        cout<<*dir<<endl;
        if (is_directory(*dir)) recursion(*dir, *newNode);
    }
}

int main()
{
    path src_path("F:\\A");
    TreeNode* rootNode = new TreeNode(src_path);  //用起始路径做参数动态分配一个内存空间
    recursion(src_path, *rootNode);
    return 0;
}

以下是调试结果:
C++递归遍历文件夹(三)——建立树结构

以下是运行结果:
C++递归遍历文件夹(三)——建立树结构
(本段程序使用了boost库,如果之前没有配置,需要下载并编译)

不懂之处可向前翻看也可留言,有用赞我哦!