std::filesystem::relative, std::filesystem::proximate
Von cppreference.com
< cpp | filesystem
| Definiert in Header <filesystem> |
||
| path relative( const std::filesystem::path& p, std::error_code& ec ); |
(1) | (seit C++17) |
| path relative( const std::filesystem::path& p, const std::filesystem::path& base = std::filesystem::current_path() ); |
(2) | (seit C++17) |
| path relative( const std::filesystem::path& p, const std::filesystem::path& base, |
(3) | (seit C++17) |
| path proximate( const std::filesystem::path& p, std::error_code& ec ); |
(4) | (seit C++17) |
| path proximate( const std::filesystem::path& p, const std::filesystem::path& base = std::filesystem::current_path() ); |
(5) | (seit C++17) |
| path proximate( const std::filesystem::path& p, const std::filesystem::path& base, |
(6) | (seit C++17) |
1) Gibt relative(p, current_path(), ec) zurück.
2,3) Gibt p relativ zu base zurück. Löst Symlinks auf und normalisiert sowohl p als auch base vor der weiteren Verarbeitung. Gibt effektiv std::filesystem::weakly_canonical(p).lexically_relative(std::filesystem::weakly_canonical(base)) oder std::filesystem::weakly_canonical(p, ec).lexically_relative(std::filesystem::weakly_canonical(base, ec)) zurück, mit der Ausnahme, dass die Fehlercode-Form bei erstem Fehler path() zurückgibt, falls vorhanden.
4) Gibt proximate(p, current_path(), ec) zurück.
5,6) Gibt effektiv std::filesystem::weakly_canonical(p).lexically_proximate(std::filesystem::weakly_canonical(base)) oder std::filesystem::weakly_canonical(p, ec).lexically_proximate(std::filesystem::weakly_canonical(base, ec)) zurück, mit der Ausnahme, dass die Fehlercode-Form bei erstem Fehler path() zurückgibt, falls vorhanden.
Inhalt |
[bearbeiten] Parameter
| p | - | ein existierender Pfad |
| base | - | Basis-Pfad, relativ zu dem p relativ/proximativ gemacht wird |
| ec | - | Fehlercode, in dem der Fehlerstatus gespeichert wird |
[bearbeiten] Rückgabewert
1) p relativ zu current_path() gemacht.
2,3) p relativ zu base gemacht.
4) p proximativ zu current_path() gemacht.
5,6) p proximativ zu base gemacht.
[bearbeiten] Ausnahmen
Jede Überladung, die nicht als noexcept markiert ist, kann std::bad_alloc auslösen, wenn die Speicherzuweisung fehlschlägt.
2,5) Wirft std::filesystem::filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit p als erstem Pfadargument, base als zweitem Pfadargument und dem OS-Fehlercode als Fehlercode-Argument.
1,3,4,6) Setzt einen std::error_code& Parameter auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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"); }
Mögliche Ausgabe
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"
[bearbeiten] Siehe auch
| (C++17) |
repräsentiert einen Pfad (Klasse) |
| (C++17) |
komponiert einen absoluten Pfad (Funktion) |
| (C++17) |
komponiert einen kanonischen Pfad (Funktion) |
| konvertiert Pfad in Normalform konvertiert Pfad in relative Form konvertiert Pfad in proximative Form (member function von std::filesystem::path) |