parent
							
								
									2435291bb8
								
							
						
					
					
						commit
						4958edc8b3
					
				
				 2 changed files with 136 additions and 0 deletions
			
			
		| @ -0,0 +1,82 @@ | ||||
| #include "dir_entry.h" | ||||
| 
 | ||||
| namespace Bk::Tools { | ||||
|     std::string DirEntry::path() | ||||
|     { | ||||
|         return ent.path().string(); | ||||
|     } | ||||
| 
 | ||||
|     std::string DirEntry::absolute_path() | ||||
|     { | ||||
|         return std::filesystem::absolute(ent.path()); | ||||
|     } | ||||
| 
 | ||||
|     std::string DirEntry::relative_path() | ||||
|     { | ||||
|         return ent.path().relative_path().string(); | ||||
|     } | ||||
| 
 | ||||
|     std::string DirEntry::name() | ||||
|     { | ||||
|         return ent.path().filename(); | ||||
|     } | ||||
| 
 | ||||
|     uintmax_t DirEntry::size() | ||||
|     { | ||||
|         return ent.file_size(); | ||||
|     } | ||||
| 
 | ||||
|     TimePoint<FileClock, Second> DirEntry::last_write() | ||||
|     { | ||||
|         return TimePoint<FileClock, Second>(ent.last_write_time()); | ||||
|     } | ||||
| 
 | ||||
|     bool DirEntry::exists() | ||||
|     { | ||||
|         return ent.exists(); | ||||
|     } | ||||
| 
 | ||||
|     bool DirEntry::is(FileType type) | ||||
|     { | ||||
|         return this->type() == type; | ||||
|     } | ||||
| 
 | ||||
|     FileType DirEntry::type() | ||||
|     { | ||||
|         return ent.status().type(); | ||||
|     } | ||||
| 
 | ||||
|     FilePerms DirEntry::perms() | ||||
|     { | ||||
|         return ent.status().permissions(); | ||||
|     } | ||||
| 
 | ||||
|     uintmax_t DirEntry::hard_links() | ||||
|     { | ||||
|         return ent.hard_link_count(); | ||||
|     } | ||||
| 
 | ||||
|     bool DirEntry::move(std::string name) | ||||
|     { | ||||
|         std::filesystem::directory_entry new_path(ent.path().parent_path()/name); | ||||
|         if (exists() && new_path.exists()) 
 | ||||
|         { | ||||
|             std::filesystem::rename(ent.path(), new_path.path()/name()); | ||||
|             ent = std::filesystem::directory_entry(new_path.path()); | ||||
|             return true; | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     bool DirEntry::rename(std::string name) | ||||
|     { | ||||
|         if (exists()) 
 | ||||
|         { | ||||
|             std::filesystem::path new_path = ent.path().parent_path()/name; | ||||
|             std::filesystem::rename(ent.path(), new_path); | ||||
|             ent = std::filesystem::directory_entry(new_path); | ||||
|             return true; | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,54 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| 
 | ||||
| #include <bakatoolspch.h> | ||||
| #include <time/time.h> | ||||
| 
 | ||||
| #define BK_DIR_ENTRY_TYPE(type) const char* type_name() override { return BK_STRINGIFY(type); }\ | ||||
|                                 static FileType get_type() { return FileType::type; }\
 | ||||
| namespace Bk::Tools { | ||||
|     using FileType = std::filesystem::file_type; | ||||
|     using FilePerms = std::filesystem::perms; | ||||
|     using FileStatus = std::filesystem::file_status; | ||||
|     using CopyOption = std::filesystem::copy_options; | ||||
| 
 | ||||
|     class DirEntry 
 | ||||
|     { | ||||
|         public: | ||||
|             DirEntry(std::string path) | ||||
|             { | ||||
|                 std::filesystem::path p(path); | ||||
|                 ent = std::filesystem::directory_entry(p); | ||||
|             } | ||||
| 
 | ||||
|             DirEntry(std::filesystem::directory_entry ent) | ||||
|             : ent(ent) {} | ||||
| 
 | ||||
|             virtual ~DirEntry() {} | ||||
|             
 | ||||
|             std::string path(); | ||||
|             std::string absolute_path(); | ||||
|             std::string relative_path(); | ||||
|             std::string name(); | ||||
| 
 | ||||
|             uintmax_t size(); | ||||
|             TimePoint<FileClock, Second> last_write(); | ||||
|             bool exists(); | ||||
|             FilePerms perms(); | ||||
|             uintmax_t hard_links(); | ||||
|             
 | ||||
|             bool move(std::string path); | ||||
|             bool rename(std::string name); | ||||
|             virtual int remove() { return (int)false; } | ||||
|             virtual void copy(std::string path, CopyOption opt) {} | ||||
| 
 | ||||
| 
 | ||||
|             virtual const char* type_name() { return "dir_entry"; } | ||||
|             FileType type(); | ||||
|             bool is(FileType type); | ||||
|             static FileType get_type() { return FileType::unknown; } | ||||
| 
 | ||||
|         protected: | ||||
|             std::filesystem::directory_entry ent; | ||||
|     }; | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue