C++遞迴遍歷資料夾(三)——建立樹結構
阿新 • • 發佈:2019-02-04
補充上篇部落格:遞迴遍歷資料夾時,同步在記憶體中建立相同的樹狀結構,用來描述所有檔案和資料夾的儲存結構。
具體實現如下:
// 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庫,如果之前沒有配置,需要下載並編譯)
不懂之處可向前翻看也可留言,有用讚我哦!