Ответ. Не существует надежного способа сравнения базовых путей строк, чтобы определить, указывают ли они на один и тот же файл.
Основная причина заключается в том, что, казалось бы, несвязанные пути могут указывать на точно такой же файл, что и перенаправления файловой системы (соединения, символические ссылки и т. Д.). Например
"d: \ Temp \ foo.txt"
"c: \ othertemp \ foo.txt"
Эти пути могут указывать на один и тот же файл. Этот случай явно исключает любую функцию сравнения строк в качестве основы для определения, указывают ли два пути на один и тот же файл.
Следующий уровень - сравнение информации о файле ОС. Откройте файл для двух путей и сравните информацию дескриптора. В окнах это можно сделать с помощью GetFileInformationByHandle. Lucian Wischik сделал отличную запись на эту тему здесь.
Однако в этом подходе все еще есть проблема. Это работает только в том случае, если учетная запись пользователя, выполняющего проверку, может открыть оба файла для чтения. Существует множество элементов, которые могут помешать пользователю открыть один или оба файла. Включая, но не ограничиваясь ...
- Отсутствие достаточных разрешений для файла
- Отсутствие достаточных прав доступа к каталогу в пути к файлу
- Изменение файловой системы, которое происходит между открытием первого файла и второго, например отключение от сети.
Когда вы начинаете рассматривать все эти проблемы, вы начинаете понимать, почему Windows не предоставляет метод для определения того, совпадают ли два пути. Это просто не простой / возможный вопрос.