add utils::path_dirname() to complement utils::path_basename()

This commit is contained in:
Axel Kohlmeyer
2020-10-23 20:12:03 -04:00
parent c51d2a286a
commit b931501711
3 changed files with 38 additions and 0 deletions

View File

@ -772,6 +772,22 @@ std::string utils::path_basename(const std::string &path) {
return path.substr(start);
}
/* ----------------------------------------------------------------------
Return only the leading part of a path, return just the directory
------------------------------------------------------------------------- */
std::string utils::path_dirname(const std::string &path) {
#if defined(_WIN32)
size_t start = path.find_last_of("/\\");
#else
size_t start = path.find_last_of("/");
#endif
if (start == std::string::npos) return ".";
return path.substr(0,start);
}
/* ----------------------------------------------------------------------
join two paths
------------------------------------------------------------------------- */

View File

@ -291,6 +291,13 @@ namespace LAMMPS_NS {
std::string path_basename(const std::string &path);
/** Return the directory part of a path. Return "." if empty
*
* \param path file path
* \return directory name */
std::string path_dirname(const std::string &path);
/** Join two pathname segments
*
* This uses the forward slash '/' character unless LAMMPS is compiled

View File

@ -525,11 +525,26 @@ TEST(Utils, path_basename)
{
#if defined(_WIN32)
ASSERT_THAT(utils::path_basename("c:\\parent\\folder\\filename"), Eq("filename"));
ASSERT_THAT(utils::path_basename("folder\\"), Eq(""));
ASSERT_THAT(utils::path_basename("c:/parent/folder/filename"), Eq("filename"));
#else
ASSERT_THAT(utils::path_basename("/parent/folder/filename"), Eq("filename"));
ASSERT_THAT(utils::path_basename("/parent/folder/"), Eq(""));
#endif
}
TEST(Utils, path_dirname)
{
#if defined(_WIN32)
ASSERT_THAT(utils::path_dirname("c:/parent/folder/filename"), Eq("c:/parent/folder"));
ASSERT_THAT(utils::path_dirname("c:\\parent\\folder\\filename"), Eq("c:\\parent\\folder"));
ASSERT_THAT(utils::path_dirname("c:filename"), Eq("."));
#else
ASSERT_THAT(utils::path_dirname("/parent/folder/filename"), Eq("/parent/folder"));
#endif
ASSERT_THAT(utils::path_dirname("filename"), Eq("."));
}
TEST(Utils, getsyserror)
{
#if defined(__linux__)