Mercurial > minori
comparison src/core/filesystem.cpp @ 60:d417e9381ca5
filesystem: WIP class-ification of paths
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Fri, 29 Sep 2023 13:52:50 -0400 |
parents | 327e9a5c72f1 |
children | 327568ad9be9 |
comparison
equal
deleted
inserted
replaced
59:327e9a5c72f1 | 60:d417e9381ca5 |
---|---|
20 #include "core/config.h" | 20 #include "core/config.h" |
21 #include <limits.h> | 21 #include <limits.h> |
22 | 22 |
23 namespace Filesystem { | 23 namespace Filesystem { |
24 | 24 |
25 bool CreateDirectories(const std::string& path) { | 25 /* FIXME: This is a very C-like way of doing this. |
26 Make a path class. */ | |
27 class Path { | |
28 public: | |
29 Path(); | |
30 Path(std::string path); | |
31 Path(const Path& path); | |
32 bool CreateDirectories() const; | |
33 bool Exists() const; | |
34 std::string Basename(); | |
35 std::string Stem(); | |
36 std::string Extension(); | |
37 Path GetParent(); | |
38 void SetPath(); | |
39 | |
40 private: | |
41 std::string _path; | |
42 } | |
43 | |
44 bool Path::CreateDirectories() const { | |
26 std::string temp = ""; | 45 std::string temp = ""; |
27 size_t start; | 46 size_t start; |
28 size_t end = 0; | 47 size_t end = 0; |
29 temp.append(path.substr(0, path.find_first_not_of(DELIM, end))); | 48 temp.append(_path.substr(0, _path.find_first_not_of(DELIM, end))); |
30 | 49 |
31 while ((start = path.find_first_not_of(DELIM, end)) != std::string::npos) { | 50 while ((start = _path.find_first_not_of(DELIM, end)) != std::string::npos) { |
32 end = path.find(DELIM, start); | 51 end = _path.find(DELIM, start); |
33 temp.append(path.substr(start, end - start)); | 52 temp.append(_path.substr(start, end - start)); |
34 #ifdef WIN32 | 53 #ifdef WIN32 |
35 if (!CreateDirectoryA(temp.c_str(), NULL) && GetLastError() == ERROR_PATH_NOT_FOUND) | 54 if (!CreateDirectoryA(temp.c_str(), NULL) && GetLastError() == ERROR_PATH_NOT_FOUND) |
36 /* ERROR_PATH_NOT_FOUND should NOT happen here */ | 55 /* ERROR_PATH_NOT_FOUND should NOT happen here */ |
37 return false; | 56 return false; |
38 #else | 57 #else |
43 temp.append(DELIM); | 62 temp.append(DELIM); |
44 } | 63 } |
45 return true; | 64 return true; |
46 } | 65 } |
47 | 66 |
48 bool Exists(const std::string& path) { | 67 bool Path::Exists() const { |
49 #if WIN32 | 68 #if WIN32 |
50 return GetFileAttributes(path.c_str()) != INVALID_FILE_ATTRIBUTES; | 69 return GetFileAttributes(_path.c_str()) != INVALID_FILE_ATTRIBUTES; |
51 #else | 70 #else |
52 struct stat st; | 71 struct stat st; |
53 return stat(path.c_str(), &st) == 0; | 72 return stat(_path.c_str(), &st) == 0; |
54 #endif | 73 #endif |
55 } | 74 } |
56 | 75 |
57 std::string Basename(const std::string& path) { | 76 std::string Path::Basename() const { |
58 return path.substr(0, path.find_last_of(DELIM)); | 77 return _path.substr(0, path.find_last_of(DELIM)); |
59 } | 78 } |
60 | 79 |
61 std::string Stem(const std::string& path) { | 80 std::string Path::Stem() const { |
62 std::string basename = Basename(path); | 81 std::string basename = Basename(); |
63 return basename.substr(0, path.find_last_of(".")); | 82 return basename.substr(0, basename.find_last_of(".")); |
64 } | 83 } |
65 | 84 |
66 std::string GetParentDirectory(const std::string& path) { | 85 std::string Path::Extension() const { |
67 return path.substr(0, path.find_last_of(DELIM)); | 86 std::string basename = Basename(_path); |
87 return basename.substr(basename.find_last_of("."), basename.end()); | |
88 } | |
89 | |
90 std::string Path::GetParent() const { | |
91 return _path.substr(0, _path.find_last_of(DELIM)); | |
68 } | 92 } |
69 | 93 |
70 std::string GetDotPath(void) { | 94 std::string GetDotPath(void) { |
71 std::string ret = ""; | 95 std::string ret = ""; |
72 #ifdef WIN32 | 96 #ifdef WIN32 |