|
@@ -3,6 +3,7 @@
|
|
|
// Refer to the license.txt file included.
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#include <array>
|
|
#include <array>
|
|
|
|
|
+#include <filesystem>
|
|
|
#include <limits>
|
|
#include <limits>
|
|
|
#include <memory>
|
|
#include <memory>
|
|
|
#include <sstream>
|
|
#include <sstream>
|
|
@@ -75,62 +76,16 @@
|
|
|
// The code still needs a ton of cleanup.
|
|
// The code still needs a ton of cleanup.
|
|
|
// REMEMBER: strdup considered harmful!
|
|
// REMEMBER: strdup considered harmful!
|
|
|
namespace Common::FS {
|
|
namespace Common::FS {
|
|
|
|
|
+namespace fs = std::filesystem;
|
|
|
|
|
|
|
|
-// Remove any ending forward slashes from directory paths
|
|
|
|
|
-// Modifies argument.
|
|
|
|
|
-static void StripTailDirSlashes(std::string& fname) {
|
|
|
|
|
- if (fname.length() <= 1) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- std::size_t i = fname.length();
|
|
|
|
|
- while (i > 0 && fname[i - 1] == DIR_SEP_CHR) {
|
|
|
|
|
- --i;
|
|
|
|
|
- }
|
|
|
|
|
- fname.resize(i);
|
|
|
|
|
|
|
+bool Exists(const fs::path& path) {
|
|
|
|
|
+ std::error_code ec;
|
|
|
|
|
+ return fs::exists(path, ec);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool Exists(const std::string& filename) {
|
|
|
|
|
- struct stat file_info;
|
|
|
|
|
-
|
|
|
|
|
- std::string copy(filename);
|
|
|
|
|
- StripTailDirSlashes(copy);
|
|
|
|
|
-
|
|
|
|
|
-#ifdef _WIN32
|
|
|
|
|
- // Windows needs a slash to identify a driver root
|
|
|
|
|
- if (copy.size() != 0 && copy.back() == ':')
|
|
|
|
|
- copy += DIR_SEP_CHR;
|
|
|
|
|
-
|
|
|
|
|
- int result = _wstat64(Common::UTF8ToUTF16W(copy).c_str(), &file_info);
|
|
|
|
|
-#else
|
|
|
|
|
- int result = stat(copy.c_str(), &file_info);
|
|
|
|
|
-#endif
|
|
|
|
|
-
|
|
|
|
|
- return (result == 0);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-bool IsDirectory(const std::string& filename) {
|
|
|
|
|
- struct stat file_info;
|
|
|
|
|
-
|
|
|
|
|
- std::string copy(filename);
|
|
|
|
|
- StripTailDirSlashes(copy);
|
|
|
|
|
-
|
|
|
|
|
-#ifdef _WIN32
|
|
|
|
|
- // Windows needs a slash to identify a driver root
|
|
|
|
|
- if (copy.size() != 0 && copy.back() == ':')
|
|
|
|
|
- copy += DIR_SEP_CHR;
|
|
|
|
|
-
|
|
|
|
|
- int result = _wstat64(Common::UTF8ToUTF16W(copy).c_str(), &file_info);
|
|
|
|
|
-#else
|
|
|
|
|
- int result = stat(copy.c_str(), &file_info);
|
|
|
|
|
-#endif
|
|
|
|
|
-
|
|
|
|
|
- if (result < 0) {
|
|
|
|
|
- LOG_DEBUG(Common_Filesystem, "stat failed on {}: {}", filename, GetLastErrorMsg());
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return S_ISDIR(file_info.st_mode);
|
|
|
|
|
|
|
+bool IsDirectory(const fs::path& path) {
|
|
|
|
|
+ std::error_code ec;
|
|
|
|
|
+ return fs::is_directory(path, ec);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
bool Delete(const std::string& filename) {
|
|
bool Delete(const std::string& filename) {
|