Espacios de nombres
Variantes
Acciones

std::filesystem::path::compare

De cppreference.com
< cpp‎ | filesystem‎ | path
 
 
 
 
int compare( const path& p ) const noexcept;
(1) (desde C++17)
int compare( const string_type& str ) const;
int compare( std::basic_string_view<value_type> str ) const;
(2) (desde C++17)
int compare( const value_type* s ) const;
(3) (desde C++17)

Compara las representaciones léxicas de la ruta de acceso y otra ruta.

1) Si root_name().native().compare(p.root_name().native()) es distinto de cero, devuelve ese valor.
De lo contrario, si has_root_directory() != p.has_root_directory(), devuelve un valor menor que cero si has_root_directory() es false y un valor mayor que cero de lo contrario.
De lo contrario devuelve un valor menor que, igual a o mayor que 0 si la porción relativa de la ruta de acceso (relative_path()) es, respectivamente, lexicográficamente menor que, igual a o mayor que la porción relativa de p (p.relative_path()). La comparación se ejecuta elemento por elemento, como si se iteraran ambas rutas de acceso desde begin() hasta end() y se comparara el resultado de native() para cada elemento.
2) Equivalente a compare(path(str)).
3) Equivalente a compare(path(s)).

Contenido

[editar] Parámetros

p - Una ruta de acceso a comparar.
str - Una cadena o vista sobre cadena que representa la ruta de acceso con la que comparar.
s - Una cadena terminada en nulo que representa la ruta de acceso con la que comparar.

[editar] Valor de retorno

Un valor menor que 0 si la ruta de acceso es lexicográficamente menor que la ruta de acceso dada.

Un valor igual a 0 si la ruta de acceso es lexicográficamente igual a la ruta de acceso dada.

Un valor mayor que 0 si la ruta de acceso es lexicográficamente mayor que la ruta de acceso dada.

[editar] Excepciones

2-3) Puede lanzar excepciones definidas por la implementación.

[editar] Notas

Para comparaciones de dos vías, los operadores binarios pueden ser más adecuados.

[editar] Ejemplo

#include <iostream>
#include <filesystem>
#include <string_view>
namespace fs = std::filesystem;
 
void demo(fs::path p1, fs::path p2, std::string_view mensaje) {
    using std::cout;
    cout << p1;
    const int rc = p1.compare(p2); 
    if(rc < 0) cout << " < ";
    else if(rc > 0) cout << " > ";
    else cout << " == ";
    cout << p2 << " \t: " << mensaje << '\n';
}
 
int main() {
    demo("/a/b/", "/a/b/", "simple");
    demo("/a/b/", "/a/b/c", "simple");
    demo("/a/b/../b", "/a/b", "no hay conversión canónica");
    demo("/a/b", "/a/b/.", "no hay conversión canónica");
    demo("/a/b/", "a/c", "las rutas absolutas se ordenan después de las relativas");
}

Salida:

"/a/b/" == "/a/b/"      : simple
"/a/b/" < "/a/b/c"	: simple
"/a/b/../b" > "/a/b"	: no hay conversión canónica
"/a/b" < "/a/b/."	: no hay conversión canónica
"/a/b/" > "a/c"	        : las rutas absolutas se ordenan después de las relativas

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2936 C++17 Todos los elementos de la ruta de acceso se comparaban directamente El nombre raíz y el directorio raíz se manejan separadamente.

[editar] Véase también

(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(C++20)
Compara lexicográficamente dos rutas de acceso.
(función) [editar]