You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

82 lines
2.1 KiB

  1. #pragma once
  2. #include "directory.h"
  3. #include "../misc.h"
  4. #include "../file.h"
  5. namespace cppfs
  6. {
  7. /* directory */
  8. const file_permissions& directory::default_permissions()
  9. {
  10. static const file_permissions value({
  11. file_permission::user_read,
  12. file_permission::user_write,
  13. file_permission::user_execute,
  14. file_permission::group_read,
  15. file_permission::group_write,
  16. file_permission::group_execute,
  17. file_permission::others_read,
  18. file_permission::others_execute,
  19. });
  20. return value;
  21. }
  22. template<typename... T_args>
  23. directory::directory(T_args&&... p_args)
  24. : _path(std::forward<T_args>(p_args)...)
  25. { }
  26. const cppfs::path& directory::path() const
  27. { return _path; }
  28. bool directory::exists() const
  29. { return _path.is_directory(); }
  30. inline const directory& directory::remove(
  31. bool p_recursive) const
  32. {
  33. if (p_recursive)
  34. {
  35. for (auto& e : *this)
  36. {
  37. auto p = path().join(e.name);
  38. switch (e.type)
  39. {
  40. case file_type::directory:
  41. directory(p).remove(true);
  42. break;
  43. case file_type::file:
  44. case file_type::symbolic_link:
  45. case file_type::hard_link:
  46. case file_type::block_device:
  47. case file_type::char_device:
  48. case file_type::named_pipe:
  49. case file_type::socket:
  50. file(p).remove();
  51. break;
  52. case file_type::unknown:
  53. throw cppcore::exception("Unknown file type: " + p.str());
  54. }
  55. }
  56. }
  57. remove_dir();
  58. return *this;
  59. }
  60. directory::iterator directory::begin() const
  61. { return iterator(*this, false); }
  62. directory::iterator directory::end() const
  63. { return iterator(*this, true); }
  64. }