From 9608bb05c83d18053c39ea726386d6fbc9ebfa4b Mon Sep 17 00:00:00 2001 From: anulax1225 Date: Mon, 25 Mar 2024 22:16:11 +0100 Subject: [PATCH] Created a basic dir class --- src/bakatools/file_system/directory.cpp | 34 ++++++++++++++++++ src/bakatools/file_system/directory.h | 46 +++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/bakatools/file_system/directory.cpp create mode 100644 src/bakatools/file_system/directory.h diff --git a/src/bakatools/file_system/directory.cpp b/src/bakatools/file_system/directory.cpp new file mode 100644 index 0000000..164ce0a --- /dev/null +++ b/src/bakatools/file_system/directory.cpp @@ -0,0 +1,34 @@ +#include "directory.h" + +namespace Bk::Tools { + std::string Directory::current() + { + return std::filesystem::current_path(); + } + + int Directory::remove() + { + return std::filesystem::remove_all(ent.path()); + } + + void Directory::copy(std::string path, CopyOption opt) + { + if (exists()) std::filesystem::copy(ent.path(), path, opt); + } + + std::vector Directory::entries() + { + std::vector entries; + for (std::filesystem::directory_entry entry : std::filesystem::directory_iterator(ent.path())) + entries.push_back(DirEntry(entry)); + return entries; + } + + std::vector Directory::r_entries() + { + std::vector entries; + for (std::filesystem::directory_entry entry : std::filesystem::recursive_directory_iterator(ent.path())) + entries.push_back(DirEntry(entry)); + return entries; + } +} \ No newline at end of file diff --git a/src/bakatools/file_system/directory.h b/src/bakatools/file_system/directory.h new file mode 100644 index 0000000..094dac2 --- /dev/null +++ b/src/bakatools/file_system/directory.h @@ -0,0 +1,46 @@ +#pragma once + +#include +#include "dir_entry.h" + +namespace Bk::Tools { + class Directory : public DirEntry + { + public: + Directory(std::string path) + : DirEntry(path) {} + + Directory(std::filesystem::directory_entry ent) + : DirEntry(ent) {} + + virtual ~Directory() {} + + int remove() override; + void copy(std::string path, CopyOption opt = CopyOption::recursive) override; + + std::vector entries(); + std::vector r_entries(); + + template + std::vector entries() + { + std::vector entries; + for (std::filesystem::directory_entry entry : std::filesystem::directory_iterator(ent.path())) + if (E::get_type() == entry.status().type()) entries.push_back(E(entry)); + return entries; + } + + template + std::vector r_entries() + { + std::vector entries; + for (std::filesystem::directory_entry entry : std::filesystem::recursive_directory_iterator(ent.path())) + if (E::get_type() == entry.status().type()) entries.push_back(E(entry)); + return entries; + } + + static std::string current(); + + BK_DIR_ENTRY_TYPE(directory) + }; +} \ No newline at end of file