Функция weakly_canonical
Функция weakly_canonical из пространства имен std::filesystem преобразует заданный путь в каноническую форму. В отличие от функции canonical, она не требует существования всех компонентов пути. Функция обрабатывает только те компоненты, которые существуют в файловой системе, а для несуществующих частей пути просто применяет лексическую нормализацию. В первый параметр мы передаем исходный путь, который нужно преобразовать.
Синтаксис
std::filesystem::weakly_canonical(p);
Пример
Давайте создадим путь с несуществующими компонентами и применим к нему функцию weakly_canonical:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::path p = "/home/user/../user/documents/../file.txt";
fs::path res = fs::weakly_canonical(p);
cout << res << endl;
return 0;
}
Результат выполнения кода:
"/home/user/file.txt"
Пример
Давайте обработаем относительный путь, содержащий несуществующие директории:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::path p = "abcde/../12345/./file.txt";
fs::path res = fs::weakly_canonical(p);
cout << res << endl;
return 0;
}
Результат выполнения кода:
"/current/path/12345/file.txt"
Обратите внимание, что несуществующие компоненты пути нормализуются лексически, а существующие разрешаются относительно текущей рабочей директории.
Смотрите также
-
функция
canonical,
которая преобразует путь в каноническую форму -
метод
lexically_normal,
который выполняет лексическую нормализацию пути -
функция
absolute,
которая возвращает абсолютный путь -
метод
parent_path,
который возвращает родительский путь