diff --git a/Source/Core/Common/StringUtil.cpp b/Source/Core/Common/StringUtil.cpp index a752ab0e10..c498e261fd 100644 --- a/Source/Core/Common/StringUtil.cpp +++ b/Source/Core/Common/StringUtil.cpp @@ -335,6 +335,23 @@ bool SplitPath(std::string_view full_path, std::string* path, std::string* filen return true; } +void UnifyPathSeparators(std::string& path) +{ +#ifdef _WIN32 + for (char& c : path) + { + if (c == '\\') + c = '/'; + } +#endif +} + +std::string WithUnifiedPathSeparators(std::string path) +{ + UnifyPathSeparators(path); + return path; +} + std::string PathToFileName(std::string_view path) { std::string file_name, extension; diff --git a/Source/Core/Common/StringUtil.h b/Source/Core/Common/StringUtil.h index 56fa756a46..5db7cbfa37 100644 --- a/Source/Core/Common/StringUtil.h +++ b/Source/Core/Common/StringUtil.h @@ -157,9 +157,17 @@ std::vector SplitString(const std::string& str, char delim); std::string JoinStrings(const std::vector& strings, const std::string& delimiter); // "C:/Windows/winhelp.exe" to "C:/Windows/", "winhelp", ".exe" +// This requires forward slashes to be used for the path separators, even on Windows. bool SplitPath(std::string_view full_path, std::string* path, std::string* filename, std::string* extension); +// Converts the path separators of a path into forward slashes on Windows, which is assumed to be +// true for paths at various places in the codebase. +void UnifyPathSeparators(std::string& path); +std::string WithUnifiedPathSeparators(std::string path); + +// Extracts just the filename (including extension) from a full path. +// This requires forward slashes to be used for the path separators, even on Windows. std::string PathToFileName(std::string_view path); bool StringBeginsWith(std::string_view str, std::string_view begin);