Лучший способ определить, ссылаются ли два пути на один и тот же файл в 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

2022-10-25T07:09:47+00:00