假设我有
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/