Я хочу написать 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, очевидно.