path lexically_normal() const; | (1) | (since C++17) |
path lexically_relative(const path& base) const; | (2) | (since C++17) |
path lexically_proximate(const path& base) const; | (3) | (since C++17) |
*this
converted to normal form (no redundant dot or dot-dot elements, and if the last element is a non-root directory separator, dot is added)*this
made relative to base
. Effectively does the following: First, determines the first mismatched element of *this
and base
using std::mismatch(begin(), end(), base.begin(), base.end())
, then.
*this
is equal to begin()
or the first mismatched element of base
is equal to base.begin()
, returns path()
(empty path). *this
is equal to end()
and the first mismatched element of base
is equal to base.end()
, returns path(".")
operator/=(path(".."))
for each element in the half-open range [
first mismatched element of base,
base.end())
, and then application of for each element in the half-open range [
first mismatched element of *this,
end())
.lexically_relative(base)
is not an empty path, return it. Otherwise return *this
.(none).
(none).
These conversions are purely lexical. They do not check that the paths exist, do not follow symlinks, and do not access the filesystem at all. For symlink-following counterparts of lexically_relative
and lexically_proximate
, see relative
and proximate
.
On Windows, the returned path has backslashes (the preferred separators),
#include <iostream> #include <filesystem> #include <cassert> namespace fs = std::filesystem; int main() { assert(fs::path("foo/./bar/..").lexically_normal() == "foo"); assert(fs::path("foo/.///bar/../").lexically_normal() == "foo/."); assert(path("/a/d").lexically_relative("/a/b/c") == "../../d"); assert(path("/a/b/c").lexically_relative("/a/d") == "../b/c"); assert(path("a/b/c").lexically_relative("a") == "b/c"); assert(path("a/b/c").lexically_relative("a/b/c/x/y") == "../.."); assert(path("a/b/c").lexically_relative("a/b/c") == "."); assert(path("a/b").lexically_relative("c/d") == ""); }
(C++17)
| composes a relative path (function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/filesystem/path/lexically_normal