Я хочу написать единичный тест, который проверяет, что два пути к файлам эквивалентны, но я не хочу предполагать, что строковое представление одинаково.Каков наилучший способ определения того, что два пути к файлу относятся к одному и тому же файлу?
Например, в Linux могут быть символические ссылки в пути в одном случае, а не в другом. В Windows может быть обозначение диска на одном (X:\foo
) и сетевое обозначение на другом (//serverX/foo
). И самое сложное: файл может быть написан на Linux на NFS ресурсе (в формате /path/to/file
) и проверен в Windows с использованием синтаксиса DOS (X:\to\file
), где X:
- это монтирование NFS до /path
.
Некоторые идеи (здесь на Stack переполнением, но не унифицированы):
- На Linux, сравните инод из
stat
- Использование
realpath
(независимая ли это платформа?) - В Windows , сравнить строки на
GetFullPathName
- В Windows, сравнить серийные номера и индекс файла с
GetFileInformationByHandle
Какое будет кросс-платформенное лучшее решение? Я пишу это на C++, но я могу спуститься к C, очевидно.
не уверен, если он затрагивает вашу проблему, но вы посмотрите на повышение :: Filesystem? http://www.boost.org/doc/libs/1_57_0/libs/filesystem/doc/index.htm – vsoftco
@JossefHarush, который не сказал бы вам, если вы смотрите на две разные копии одного и того же файла. –