Я не верю, что в API есть удобная функция, чтобы ответить на этот вопрос для вас.Но я также не думаю, что слишком сложно написать надежную функцию для этого.Вот схема:
- Убедитесь, что Path1 и Path2 являются абсолютными путями.
- Проверьте, ссылаются ли Path1 и Path2 на один и тот же объект файловой системы (подробнее об этом ниже).
- Если это так, то ваша функция возвращает true.
- Если не убрать фамилию из Path2, т.е. удалить разделитель конечного пути (\ или /) и все, что за ним следует.
- Если на шаге 4 не удалось удалить какой-либо текст (например, не осталось разделителей пути), то вы достигли корневого уровня, и ваша функция вернула false.
- Перейти к 2.
СейчасКак проверить, что два имени относятся к одному и тому же объекту файловой системы.Самый безопасный способ сделать это - вызвать GetFileInformationByHandle()
для обоих имен и сравнить dwVolumeSerialNumber
, nFileIndexLow
, nFileIndexHigh
.Если все они равны, то два имени относятся к одному и тому же объекту.
Обратите внимание, что недостаточно сравнивать строки, поскольку один объект файловой системы может иметь много разных имен.Например, жесткие ссылки, символические ссылки, соединения, UNC против сопоставленных букв дисков и т. Д.