diff --git a/other/build.nr b/other/build.nr index e0fbadd..c533c5e 100644 --- a/other/build.nr +++ b/other/build.nr @@ -1 +1 @@ -2020 +2021 diff --git a/src/ostd/io/FileSystem.cpp b/src/ostd/io/FileSystem.cpp index 9eb4c6a..7bebc03 100644 --- a/src/ostd/io/FileSystem.cpp +++ b/src/ostd/io/FileSystem.cpp @@ -1,9 +1,9 @@ -#include "../utils/Utils.hpp" +#include "FileSystem.hpp" #include "Logger.hpp" namespace ostd { - std::vector Utils::listFilesInDirectory(const String& directoryPath) + std::vector FileSystem::listFilesInDirectory(const String& directoryPath) { std::vector list; for (const auto& file : std::filesystem::directory_iterator(directoryPath.cpp_str())) @@ -14,7 +14,7 @@ namespace ostd return list; } - std::vector Utils::listDirectoriesInDirectory(const String& directoryPath) + std::vector FileSystem::listDirectoriesInDirectory(const String& directoryPath) { std::vector list; for (const auto& file : std::filesystem::directory_iterator(directoryPath.cpp_str())) @@ -25,7 +25,7 @@ namespace ostd return list; } - std::vector Utils::listDirectory(const String& directoryPath) + std::vector FileSystem::listDirectory(const String& directoryPath) { std::vector list; for (const auto& file : std::filesystem::directory_iterator(directoryPath.cpp_str())) @@ -33,7 +33,7 @@ namespace ostd return list; } - std::vector Utils::listFilesInDirectoryRecursive(const String& directoryPath) + std::vector FileSystem::listFilesInDirectoryRecursive(const String& directoryPath) { std::vector list; for (const auto& file : std::filesystem::recursive_directory_iterator(directoryPath.cpp_str())) @@ -44,7 +44,7 @@ namespace ostd return list; } - std::vector Utils::listDirectoriesInDirectoryRecursive(const String& directoryPath) + std::vector FileSystem::listDirectoriesInDirectoryRecursive(const String& directoryPath) { std::vector list; for (const auto& file : std::filesystem::recursive_directory_iterator(directoryPath.cpp_str())) @@ -55,7 +55,7 @@ namespace ostd return list; } - std::vector Utils::listDirectoryRecursive(const String& directoryPath) + std::vector FileSystem::listDirectoryRecursive(const String& directoryPath) { std::vector list; for (const auto& file : std::filesystem::recursive_directory_iterator(directoryPath.cpp_str())) @@ -63,25 +63,27 @@ namespace ostd return list; } - std::filesystem::path Utils::getHomeDirPath(void) + + std::filesystem::path FileSystem::getHomeDirPath(void) { String home_path = ""; - #ifdef WINDOWS_OS - home_path = String(getenv("HOMEDRIVE")) + "\\" + String(getenv("HOMEPATH")); - #elif defined(LINUX_OS) || defined(MAC_OS) - home_path = String(getenv("HOME")); - #else - home_path = "NULL"; - #endif + #ifdef WINDOWS_OS + home_path = String(getenv("HOMEDRIVE")) + "\\" + String(getenv("HOMEPATH")); + #elif defined(LINUX_OS) || defined(MAC_OS) + home_path = String(getenv("HOME")); + #else + home_path = "NULL"; + #endif return home_path; } - std::filesystem::path Utils::getWorkingDirPath(void) + std::filesystem::path FileSystem::getWorkingDirPath(void) { return std::filesystem::current_path(); } - bool Utils::ensureDirectory(const String& path) + + bool FileSystem::ensureDirectory(const String& path) { namespace fs = std::filesystem; @@ -110,7 +112,7 @@ namespace ostd return true; } - bool Utils::deleteDirectory(const String& path) + bool FileSystem::deleteDirectory(const String& path) { namespace fs = std::filesystem; try @@ -127,4 +129,47 @@ namespace ostd } return false; } + + + bool FileSystem::directoryExists(const String& directoryPath) + { + namespace fs = std::filesystem; + try + { + fs::path p(directoryPath); + return fs::exists(p) && fs::is_directory(p); + } + catch (const fs::filesystem_error&) + { + return false; + } + } + + bool FileSystem::fileExists(const String& filePath) + { + namespace fs = std::filesystem; + try + { + fs::path p(filePath); + return fs::exists(p) && !fs::is_directory(p); + } + catch (const fs::filesystem_error&) + { + return false; + } + } + + bool FileSystem::pathExists(const String& path) + { + namespace fs = std::filesystem; + try + { + fs::path p(path); + return fs::exists(p); + } + catch (const fs::filesystem_error&) + { + return false; + } + } } diff --git a/src/ostd/io/FileSystem.hpp b/src/ostd/io/FileSystem.hpp new file mode 100644 index 0000000..16d8bb4 --- /dev/null +++ b/src/ostd/io/FileSystem.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +#include + +namespace ostd +{ + class FileSystem + { + public: + static std::vector listFilesInDirectory(const String& directoryPath); + static std::vector listDirectoriesInDirectory(const String& directoryPath); + static std::vector listDirectory(const String& directoryPath); + static std::vector listFilesInDirectoryRecursive(const String& directoryPath); + static std::vector listDirectoriesInDirectoryRecursive(const String& directoryPath); + static std::vector listDirectoryRecursive(const String& directoryPath); + + static std::filesystem::path getHomeDirPath(void); + static std::filesystem::path getWorkingDirPath(void); + + static bool ensureDirectory(const String& path); + static bool deleteDirectory(const String& path); + + static bool directoryExists(const String& directoryPath); + static bool fileExists(const String& filePath); + static bool pathExists(const String& path); + }; +} diff --git a/src/ostd/ostd.hpp b/src/ostd/ostd.hpp index 1d9009f..b2a93c9 100644 --- a/src/ostd/ostd.hpp +++ b/src/ostd/ostd.hpp @@ -29,6 +29,7 @@ #include #include +#include #include #include #include diff --git a/src/ostd/string/String.hpp b/src/ostd/string/String.hpp index a867fb2..cab5602 100644 --- a/src/ostd/string/String.hpp +++ b/src/ostd/string/String.hpp @@ -61,6 +61,7 @@ namespace ostd inline String(void) { m_data = ""; } inline String(const cpp_string& str) { m_data = str; } inline String(const char* str) { m_data = str; } + inline String(const std::filesystem::path& path) { m_data = path; } inline cpp_string cpp_str(void) const { return m_data; } inline cpp_string& cpp_str_ref(void) { return m_data; } diff --git a/src/ostd/utils/Utils.hpp b/src/ostd/utils/Utils.hpp index b28864f..e43959d 100755 --- a/src/ostd/utils/Utils.hpp +++ b/src/ostd/utils/Utils.hpp @@ -20,7 +20,6 @@ #pragma once -#include #include #include #include @@ -61,18 +60,6 @@ namespace ostd //Implemented in static String md5(const String& str); - //Implemented in - static std::vector listFilesInDirectory(const String& directoryPath); - static std::vector listDirectoriesInDirectory(const String& directoryPath); - static std::vector listDirectory(const String& directoryPath); - static std::vector listFilesInDirectoryRecursive(const String& directoryPath); - static std::vector listDirectoriesInDirectoryRecursive(const String& directoryPath); - static std::vector listDirectoryRecursive(const String& directoryPath); - static std::filesystem::path getHomeDirPath(void); - static std::filesystem::path getWorkingDirPath(void); - static bool ensureDirectory(const String& path); - static bool deleteDirectory(const String& path); - //Implemented in static int32_t solveIntegerExpression(const String& expr);