【问题标题】:How to get the last directory in a std::filesystem::path?如何获取 std::filesystem::path 中的最后一个目录?
【发布时间】:2020-05-26 09:16:54
【问题描述】:

我有一个目录路径,我想使用 C++ 的std::filesystem 获取该目录的名称。例如,如果路径是:

std::filesystem::path fake_path("C:\\fake\\path\\to\\my_directory\\");

我想获得“my_directory”。

我见过this answer 并最初认为在boost::filesystem 中有效的方法在std::filesystem 中无效,尽管这可能不正确。无论哪种方式,我都不认为这是重复的,因为它专门询问boost::filesystem 和以文件结尾的路径。

我可以想到其他几种解决方案,例如获取 fake_path.end() - 2 或获取字符串并在分隔符上拆分,但它们都不像 fake_path.filename() 那样简单。

有没有一种干净的方式来获取目录路径的最后一部分,大致相当于在文件路径上调用.filename()

【问题讨论】:

标签: c++ std-filesystem


【解决方案1】:

您可以通过以下方式获得它:

fake_path.parent_path().filename()

【讨论】:

  • 有趣。这行得通,但我不确定我明白为什么。似乎 parent_path 结果仍然与原始路径有一些联系(而不仅仅是等同于“C:\\fake\\path\\to\\”),但将“my_directory”视为文件?
  • std::path 不知道路径是否实际指向实际目录或文件。它甚至可能包含一条不存在的路径。它基本上是一个标识符列表(代表每个目录名称,以可能代表目录或文件的最终标识符结尾)。当有尾随(反)斜杠时,最终标识符为空字符串。调用parent_path,会给你一个没有最终元素的新路径(这里是空字符串)。
  • 啊,好吧,这很有道理。有一个空的最终标识符是我缺少的部分,我想。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 2011-04-23
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多