struct node { enum file_type { file, folder }; std::string name; file_type type; std::list<node> children; };
void fs::SaveFiles() { std::ofstream ofs("file.config"); SaveFileHelper(ofs, root); }
void fs::SaveFileHelper(std::ofstream& ofs, node& n) { ofs << ' ' << n.name << ' '; if (n.type == node::folder) { ofs << '['; for (auto& c : n.children) { SaveFileHelper(ofs, c); } ofs << "] "; } }
void fs::LoadFiles() { std::ifstream ifs("file.config"); std::string start; ifs >> start; LoadFileHelper(ifs, root); }
void fs::LoadFileHelper(std::ifstream& ifs, node& n) { std::string token; while (ifs >> token) { if (token.empty()) continue; if (token[0] == '[') { n.children.back().type = node::file_type::folder; if (token == "[]") { continue; } else { LoadFileHelper(ifs, n.children.back()); } } else if (token[0] == ']') { return; } else { n.children.push_back(node{ .name = token, .type = node::file_type::file }); } } }
|