Advertisement
kutuzzzov

Урок 6 Тернистые пути

May 26th, 2023
983
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 1 0
  1. #include <cassert>
  2. #include <filesystem>
  3. #include <fstream>
  4. #include <iostream>
  5. #include <sstream>
  6. #include <string>
  7. #include <string_view>
  8. #include <vector>
  9. #include <algorithm>
  10.  
  11. using namespace std;
  12. using filesystem::path;
  13.  
  14. path operator""_p(const char* data, std::size_t sz) {
  15.     return path(data, data + sz);
  16. }
  17.  
  18. void PrintTree(ostream& dst, const path& p, const filesystem::file_status& status, int offset) {
  19.     dst << string(offset, ' ') << p.filename().string() << endl;
  20.     if (status.type() == filesystem::file_type::directory) {
  21.         vector<filesystem::directory_entry> objects;
  22.         for (const auto& dir_entry : filesystem::directory_iterator(p)) {
  23.             objects.push_back(dir_entry);
  24.         }
  25.         sort(objects.begin(), objects.end(), [](const auto& lhs, const auto& rhs) {
  26.             return lhs.path().filename() > rhs.path().filename();
  27.             });
  28.         for (const auto& dir_entry : objects) {
  29.             PrintTree(dst, dir_entry.path(), dir_entry.status(), offset + 2);
  30.         }
  31.     }
  32. }
  33.  
  34. // напишите эту функцию
  35. void PrintTree(ostream& dst, const path& p) {
  36.     error_code err;
  37.     auto status = filesystem::status(p, err);
  38.     if (err) {
  39.         return;
  40.     }
  41.     PrintTree(dst, p, status, 0);
  42. }
  43.  
  44. int main() {
  45.     error_code err;
  46.     filesystem::remove_all("test_dir", err);
  47.     filesystem::create_directories("test_dir"_p / "a"_p, err);
  48.     filesystem::create_directories("test_dir"_p / "b"_p, err);
  49.  
  50.     ofstream("test_dir"_p / "b"_p / "f1.txt"_p);
  51.     ofstream("test_dir"_p / "b"_p / "f2.txt"_p);
  52.     ofstream("test_dir"_p / "a"_p / "f3.txt"_p);
  53.  
  54.     ostringstream out;
  55.     PrintTree(out, "test_dir"_p);
  56.     assert(out.str() ==
  57.         "test_dir\n"
  58.         "  b\n"
  59.         "    f2.txt\n"
  60.         "    f1.txt\n"
  61.         "  a\n"
  62.         "    f3.txt\n"sv
  63.     );
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement