C++ filesystem 取后三项
时间: 2023-07-11 10:40:08 浏览: 53
你可以使用`std::filesystem::path`类的`std::distance`和`std::prev`函数来获取路径中的后三项。具体来说,你可以使用`std::distance`函数计算路径中元素的个数,并使用`std::prev`函数获取路径中从末尾开始数的前三个元素。以下是示例代码:
```c++
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
std::string path_str = "/usr/local/bin";
fs::path p(path_str);
// 获取后三个元素
auto it = std::prev(p.end(), 3);
for (; it != p.end(); ++it) {
std::cout << *it << std::endl;
}
return 0;
}
```
在上面的代码中,首先将路径字符串`"/usr/local/bin"`转换为`std::filesystem::path`类型的对象`p`。然后,使用`std::prev(p.end(), 3)`获取从末尾开始数的前三个元素的迭代器,最终使用循环输出了后三个元素`"local"`、`"bin"`和空字符串。注意,路径中的最后一个元素可能是空字符串,因此在使用时需要进行判断。
相关问题
C++ filesystem 取路径的后几项
你可以使用C++17中的std::filesystem库来获取路径的后几项。具体来说,你可以使用std::filesystem::path::filename()和std::filesystem::path::parent_path()来获取路径的最后一项和上一级路径,然后可以通过递归调用parent_path()方法来获取路径的更上层级。以下是一个示例代码:
```c++
#include <filesystem>
#include <iostream>
int main() {
std::filesystem::path myPath = "/home/user/folder/file.txt";
int levels = 2;
std::string result = "";
for (int i = 0; i < levels; i++) {
result = myPath.filename().string() + "/" + result;
myPath = myPath.parent_path();
}
std::cout << "The last " << levels << " levels of the path are: " << result << std::endl;
return 0;
}
```
在这个示例中,我们定义了一个路径myPath和一个要获取的层数levels。然后我们使用一个循环来递归遍历myPath的父级路径,并将每个路径的最后一项添加到结果字符串中。最后,我们输出结果字符串以获取路径的最后levels项。
C++ filesystem 清除路径前两项
你可以使用C++标准库中的`std::filesystem::path`类来清除路径前两项。具体来说,你可以使用`path::begin()`和`path::end()`函数获取路径中的所有元素,并使用`path::erase()`函数删除前两个元素。以下是示例代码:
```c++
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
std::string path_str = "/usr/local/bin";
fs::path p(path_str);
// 删除前两个元素
p.erase(p.begin(), std::next(p.begin(), 2));
std::cout << p << std::endl; // 输出: "bin"
return 0;
}
```
在上面的代码中,首先将路径字符串`"/usr/local/bin"`转换为`std::filesystem::path`类型的对象`p`。然后,使用`p.erase(p.begin(), std::next(p.begin(), 2))`删除了前两个元素`"/usr"`和`"/local"`,最终输出结果为`"bin"`。