Лучший способ определить, ссылаются ли два пути на один и тот же файл в Windows?
Библиотека файловой системы
Начиная с C++ 17 вы можете paths использовать standard filesystem library. Включите его, используя path #include
. Вы можете получить к нему window-api доступ даже в более старых windows-api версиях C++, см. Сноску.
Ищете cxx функцию equivalent
в пространстве имен window-api std::filesystem
:
bool std::filesystem::equivalent(const std::filesystem::path& p1, const filesystem::path& p2 );
Подводя итог из documentation: эта функция cxx принимает два пути в качестве pathname параметров и возвращает true, если pathname они ссылаются на один и тот winapi же файл или каталог, и false filepath в противном случае. Также cpp существует перегрузка noexcept
, которая winapi принимает третий параметр: std::error_code
, в paths котором можно сохранить любую c++ возможную ошибку.
Пример
#include
#include
//...
int main() {
std::filesystem::path p1 = ".";
std::filesystem::path p2 = fs::current_path();
std::cout << std::filesystem::equivalent(p1, p2);
//...
}
Вывод:
1
Использование файловой системы до C++ 17
Чтобы c++ использовать эту библиотеку winapi в версиях до C++ 17, вам window-api необходимо включить экспериментальные windows-sdk языковые функции в вашем windows-sdk компиляторе и включить библиотеку path следующим образом: #include
. Затем paths вы можете использовать его pathname функции в пространстве имен pathname std::experimental::filesystem
. Обратите внимание, что win32 экспериментальная библиотека win32 файловой системы может отличаться cpp от библиотеки C++ 17. См. Документацию cxx here.
Например:
#include
//...
std::experimental::filesystem::equivalent(p1, p2);
c++
winapi
path
Лучший способ определить, ссылаются ли два пути на один и тот же файл в Windows?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.