Common/FileUtil: Add CreateDirs() function as a wrapper around std::filesystem::create_directories().

This commit is contained in:
Admiral H. Curtiss 2023-02-22 02:31:06 +01:00
parent 616d57e7fc
commit e479f92418
No known key found for this signature in database
GPG Key ID: F051B4C4044F33FB
2 changed files with 20 additions and 2 deletions

View File

@ -193,7 +193,6 @@ bool Delete(const std::string& filename, IfAbsentBehavior behavior)
return true;
}
// Returns true if successful, or path already exists.
bool CreateDir(const std::string& path)
{
DEBUG_LOG_FMT(COMMON, "{}: directory {}", __func__, path);
@ -209,6 +208,22 @@ bool CreateDir(const std::string& path)
return success;
}
bool CreateDirs(std::string_view path)
{
DEBUG_LOG_FMT(COMMON, "{}: directory {}", __func__, path);
std::error_code error;
auto native_path = StringToPath(path);
bool success = fs::create_directories(native_path, error);
// If the path was not created, check if it was a pre-existing directory
std::error_code error_ignored;
if (!success && fs::is_directory(native_path, error_ignored))
success = true;
if (!success)
ERROR_LOG_FMT(COMMON, "{}: failed on {}: {}", __func__, path, error.message());
return success;
}
bool CreateFullPath(std::string_view fullPath)
{
DEBUG_LOG_FMT(COMMON, "{}: path {}", __func__, fullPath);

View File

@ -140,9 +140,12 @@ u64 GetSize(const std::string& path);
// Overloaded GetSize, accepts FILE*
u64 GetSize(FILE* f);
// Returns true if successful, or path already exists.
// Creates a single directory. Returns true if successful or if the path already exists.
bool CreateDir(const std::string& filename);
// Creates directories recursively. Returns true if successful or if the path already exists.
bool CreateDirs(std::string_view filename);
// Creates the full path to the file given in fullPath.
// That is, for path '/a/b/c.bin', creates folders '/a' and '/a/b'.
// Returns true if creation is successful or if the path already exists.