Я хочу написать unit test, который проверяет, что два пути к файлам эквивалентны, но я не хочу предполагать, что строковое представление одинаковое.
Например, в Linux могут быть символические ссылки на пути в одном случае, а не в другом. В Windows может быть обозначение диска на одном (X:\foo
) и сетевом обозначении на другом (//serverX/foo
). И самое сложное: файл, возможно, был написан в Linux на NFS share (в синтаксисе /path/to/file
) и проверен в Windows с использованием синтаксиса DOS (X:\to\file
), где X:
- монтирование NFS до /path
.
Некоторые идеи (найдены здесь в Stack Overflow, но не унифицированы):
- В Linux сравните индексный дескриптор
stat
- Используйте
realpath
(эта платформа независима?) - В Windows сравните строки на
GetFullPathName
- В Windows сравните серийные номера и индекс файла с
GetFileInformationByHandle
Каким будет лучшее межплатформенное решение? Я пишу это на С++, но я могу спуститься к C, очевидно.