std::filesystem::relative, std::filesystem::proximate
From cppreference.com
< cpp | filesystem
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Filesystem library
filesystem::relativefilesystem::proximate
Defined in header
<filesystem>
path relative( const std::filesystem::path & p,
std::error_code & ec );
(1)
(since C++17)
std::error_code & ec );
path relative( const std::filesystem::path & p,
const std::filesystem::path & base = std::filesystem::current_path () );
(2)
(since C++17)
const std::filesystem::path & base = std::filesystem::current_path () );
path relative( const std::filesystem::path & p,
(3)
(since C++17)
const std::filesystem::path & base,
path proximate( const std::filesystem::path & p,
std::error_code & ec );
(4)
(since C++17)
std::error_code & ec );
path proximate( const std::filesystem::path & p,
const std::filesystem::path & base = std::filesystem::current_path () );
(5)
(since C++17)
const std::filesystem::path & base = std::filesystem::current_path () );
path proximate( const std::filesystem::path & p,
(6)
(since C++17)
const std::filesystem::path & base,
1) Returns relative(p, current_path(), ec).
2,3) Returns p made relative to base. Resolves symlinks and normalizes both p and base before other processing. Effectively returns std::filesystem::weakly_canonical (p).lexically_relative(std::filesystem::weakly_canonical (base)) or std::filesystem::weakly_canonical (p, ec).lexically_relative(std::filesystem::weakly_canonical (base, ec)), except the error code form returns path() at the first error occurrence, if any.
4) Returns proximate(p, current_path(), ec).
5,6) Effectively returns std::filesystem::weakly_canonical (p).lexically_proximate(std::filesystem::weakly_canonical (base)) or std::filesystem::weakly_canonical (p, ec).lexically_proximate(std::filesystem::weakly_canonical (base, ec)), except the error code form returns path() at the first error occurrence, if any.
[edit] Parameters
p
-
an existing path
base
-
base path, against which p will be made relative/proximate
ec
-
error code to store error status to
[edit] Return value
1) p made relative against current_path().
2,3) p made relative against base.
4) p made proximate against current_path().
5,6) p made proximate against base.
[edit] Exceptions
Any overload not marked noexcept
may throw std::bad_alloc if memory allocation fails.
2,5) Throws std::filesystem::filesystem_error on underlying OS API errors, constructed with p as the first path argument, base as the second path argument, and the OS error code as the error code argument.
1,3,4,6) Sets a std::error_code & parameter to the OS API error code if an OS API call fails, and executes ec.clear () if no errors occur.
[edit] Example
Run this code
#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"); }
Possible output:
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"
[edit] See also
converts path to normal form
converts path to relative form
converts path to proximate form
(public member function of
converts path to relative form
converts path to proximate form
(public member function of
std::filesystem::path
) [edit]