Я не знаю, есть ли простой способ сделать это непосредственно в C #, но вы могли бы сделать неуправляемый вызов GetFileInformationByHandle (pinvoke page здесь ), который вернет BY_HANDLE_FILE_INFORMATION структура. Он содержит три поля, которые можно объединить для однозначной идентификации файла:
dwVolumeSerialNumber:
Серийный номер тома, содержащего файл.
...
nFileIndexHigh:
Старшая часть уникального идентификатора, связанная с
файл.
nFileIndexLo:
Младшая часть уникального идентификатора, связанная с
файл.
Идентификатор (младшая и старшая части) и серийный номер тома однозначно определяют файл на одном компьютере. Чтобы определить, представляют ли два открытых маркера один и тот же файл, объедините идентификатор и серийный номер тома для каждого файла и сравните их.
Обратите внимание, что это работает, только если обе ссылки объявлены с одного и того же компьютера.
Отредактировано, чтобы добавить:
В соответствии с этим вопросом это может не сработать в вашей ситуации, так как dwVolumeSerialNumber может отличаться, если определения общих ресурсов различны. Сначала я попробовал бы это, так как я всегда думал, что серийный номер тома зависит от конкретного диска, а не от конкретного пути. Хотя мне никогда не нужно было это доказывать, поэтому я могу быть (и, вероятно, ошибаюсь).