补充上篇博客:递归遍历文件夹时,同步在内存中建立相同的树状结构,用来描述所有文件和文件夹的保存结构。
具体实现如下:
// 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;
}
以下是调试结果:
以下是运行结果:
(本段程序使用了boost库,如果之前没有配置,需要下载并编译)
不懂之处可向前翻看也可留言,有用赞我哦!