Функция equivalent
Функция equivalent из пространства имен std::filesystem
проверяет, ссылаются ли два пути на один и тот же
файл или директорию. В первый параметр мы передаем
первый путь, а во второй - второй путь. Функция
возвращает true, если оба пути указывают на
один и тот же объект файловой системы, и false
в противном случае. Если хотя бы один из путей не
существует, функция выбрасывает исключение
filesystem_error.
Синтаксис
bool equivalent(const path& p1, const path& p2)
bool equivalent(const path& p1, const path& p2, error_code& ec)
Пример
Давайте проверим, ссылаются ли два разных пути на один и тот же файл:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::path p1 = "/tmp/test.txt";
fs::path p2 = "/tmp/./test.txt";
try
{
if (fs::equivalent(p1, p2))
{
cout << "Paths are equivalent" << endl;
}
else
{
cout << "Paths are not equivalent" << endl;
}
}
catch (const fs::filesystem_error& e)
{
cout << "Error: " << e.what() << endl;
}
return 0;
}
Результат выполнения кода:
"Paths are equivalent"
Пример
Давайте проверим эквивалентность двух разных файлов:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::path p1 = "/tmp/test1.txt";
fs::path p2 = "/tmp/test2.txt";
try
{
if (fs::equivalent(p1, p2))
{
cout << "Paths are equivalent" << endl;
}
else
{
cout << "Paths are not equivalent" << endl;
}
}
catch (const fs::filesystem_error& e)
{
cout << "Error: " << e.what() << endl;
}
return 0;
}
Результат выполнения кода:
"Paths are not equivalent"
Пример
Давайте используем версию функции с параметром
error_code, чтобы избежать исключений:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::path p1 = "/tmp/test.txt";
fs::path p2 = "/tmp/./test.txt";
error_code ec;
bool res = fs::equivalent(p1, p2, ec);
if (ec)
{
cout << "Error: " << ec.message() << endl;
}
else if (res)
{
cout << "Paths are equivalent" << endl;
}
else
{
cout << "Paths are not equivalent" << endl;
}
return 0;
}
Результат выполнения кода:
"Paths are equivalent"
Смотрите также
-
класс
path,
который представляет путь к файлу или директории -
функция
canonical,
которая возвращает канонический путь -
функция
absolute,
которая возвращает абсолютный путь -
функция
is_regular_file,
которая проверяет, является ли путь обычным файлом