std::filesystem::relative, std::filesystem::proximate
来自 cppreference.com
< cpp | filesystem
定义在头文件 <filesystem> 中 |
||
path relative( const std::filesystem::path& p, std::error_code& ec ); |
(1) | (自 C++17 起) |
path relative( const std::filesystem::path& p, const std::filesystem::path& base = std::filesystem::current_path() ); |
(2) | (自 C++17 起) |
path relative( const std::filesystem::path& p, const std::filesystem::path& base, |
(3) | (自 C++17 起) |
path proximate( const std::filesystem::path& p, std::error_code& ec ); |
(4) | (自 C++17 起) |
path proximate( const std::filesystem::path& p, const std::filesystem::path& base = std::filesystem::current_path() ); |
(5) | (自 C++17 起) |
path proximate( const std::filesystem::path& p, const std::filesystem::path& base, |
(6) | (自 C++17 起) |
1) 返回 relative(p, current_path(), ec).
2,3) 返回 p 相对于 base 的相对路径。在进行其他处理之前,会解析符号链接并规范化 p 和 base。实际上返回 std::filesystem::weakly_canonical(p).lexically_relative(std::filesystem::weakly_canonical(base)) 或 std::filesystem::weakly_canonical(p, ec).lexically_relative(std::filesystem::weakly_canonical(base, ec)),除非错误代码形式在遇到第一个错误时(如果有)返回 path().
4) 返回 proximate(p, current_path(), ec).
5,6) 实际上返回 std::filesystem::weakly_canonical(p).lexically_proximate(std::filesystem::weakly_canonical(base)) 或 std::filesystem::weakly_canonical(p, ec).lexically_proximate(std::filesystem::weakly_canonical(base, ec)),除非错误代码形式在遇到第一个错误时(如果有)返回 path().
内容 |
[编辑] 参数
p | - | 现有路径 |
base | - | 基路径,p 将相对于它进行相对/近似化 |
ec | - | 用于存储错误状态的错误代码 |
[编辑] 返回值
1) p 相对于 current_path() 的相对路径。
2,3) p 相对于 base 的相对路径。
4) p 相对于 current_path() 的近似路径。
5,6) p 相对于 base 的近似路径。
[编辑] 异常
任何未标记为 noexcept
的重载在内存分配失败时可能会抛出 std::bad_alloc。
2,5) 在底层操作系统 API 错误上抛出 std::filesystem::filesystem_error,使用 p 作为第一个路径参数、base 作为第二个路径参数以及操作系统错误代码作为错误代码参数构建。
[编辑] 示例
运行此代码
#include <filesystem> #include <iostream> void show(std::filesystem::path x, std::filesystem::path y) { std::cout << "x:\t\t " << x << "\ny:\t\t " << y << '\n' << "relative(x, y): " << std::filesystem::relative(x, y) << '\n' << "proximate(x, y): " << std::filesystem::proximate(x, y) << "\n\n"; } int main() { show("/a/b/c", "/a/b"); show("/a/c", "/a/b"); show("c", "/a/b"); show("/a/b", "c"); }
可能输出
x: "/a/b/c" y: "/a/b" relative(x, y): "c" proximate(x, y): "c" x: "/a/c" y: "/a/b" relative(x, y): "../c" proximate(x, y): "../c" x: "c" y: "/a/b" relative(x, y): "" proximate(x, y): "c" x: "/a/b" y: "c" relative(x, y): "" proximate(x, y): "/a/b"
[编辑] 另请参阅
(C++17) |
表示路径 (类) |
(C++17) |
组成绝对路径 (函数) |
(C++17) |
组成规范路径 (函数) |
将路径转换为规范形式 将路径转换为相对形式 将路径转换为近似形式 ( std::filesystem::path 的公共成员函数) |