c++ - 使用boost从文件路径中提取直接父目录

标签 c++ boost std boost-filesystem

假设我有

String t = "c:/foo/foo1/foo2/foo3/file.txt"

我想提取"foo3/file.txt"

我该怎么做(使用 boost 或 std)?

到目前为止,这是我一直在尝试的:

boost::filesystem::path pathToObject(t);

使用 pathToObject.filename() 我当然可以提取文件名。我玩过 t.find_last_of("/") 但我真的需要 t.find_second_to_last_of("/")

最佳答案

string::find_last_of 有一个 optional argument这使您可以指定要查找的字符串的深度。

所以你可以定义

size_t second_to_last = t.find_last_of("/", t.find_last_of("/")-1);
std::string file_with_parent = t.substr(second_to_last+1);

第二个参数告诉他只搜索 before 最后一个 /

警告:如果您有类似"C:/bli/bla//blubb.txt" 的东西,这可能与您想要的不同。通常,路径可能很复杂且令人困惑,并且尝试通过字符串操作来征服它们只适用于行为非常良好的输入,而这通常是人们无法假设的。

因此,我建议为这项工作使用合适的工具。*但是由于问题声称 find_last_of 不会完成这项工作,我觉得有必要提醒人们标准设施并不完全像正如许多人认为的那样无能为力。

*我怀疑 boost 路径库是其中之一,但我从未使用过它。

关于c++ - 使用boost从文件路径中提取直接父目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411505/

相关文章:

c++ - electron.desktopCapturer 到 cv.VideoCapture [electron, nodejs, opencv4nodejs]

c++ - boost 线程互斥数组

c++ - 从 boost::regex 获取子表达式(匹配前)

c++ - 使用 C++/boost::asio/libcurl 的简单代理 - 无法下载图像

c++ - 'for each' 不是 std 的成员。已启用 C++11 支持

c++ - 静态分配内存释放

c++ - 使用二进制 write() read() 将 vector <char> 作为流连接

c++ - 在 vector 结果记录器中记录元组

c++ - std::function 的重载运算符?

c++ - 我应该如何从课外索引私有(private) vector ?