РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
511 of 815 menu

Функция 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,
    которая проверяет, является ли путь обычным файлом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить