#pragma once #include "directory.h" #include "../misc.h" #include "../file.h" namespace cppfs { /* directory */ const file_permissions& directory::default_permissions() { static const file_permissions value({ file_permission::user_read, file_permission::user_write, file_permission::user_execute, file_permission::group_read, file_permission::group_write, file_permission::group_execute, file_permission::others_read, file_permission::others_execute, }); return value; } template directory::directory(T_args&&... p_args) : _path(std::forward(p_args)...) { } const cppfs::path& directory::path() const { return _path; } bool directory::exists() const { return _path.is_directory(); } inline const directory& directory::remove( bool p_recursive) const { if (p_recursive) { for (auto& e : *this) { auto p = path().join(e.name); switch (e.type) { case file_type::directory: directory(p).remove(true); break; case file_type::file: case file_type::symbolic_link: case file_type::hard_link: case file_type::block_device: case file_type::char_device: case file_type::named_pipe: case file_type::socket: file(p).remove(); break; case file_type::unknown: throw cppcore::exception("Unknown file type: " + p.str()); } } } remove_dir(); return *this; } directory::iterator directory::begin() const { return iterator(*this, false); } directory::iterator directory::end() const { return iterator(*this, true); } }