С# - подсчитывать и перечислять местоположения жестких ссылок в файле

В настоящее время я ищу решение С#, которое может считывать количество жестких ссылок файла и расположение их ссылок. Я имею в виду расширение оболочки ссылки на программу, которое может сделать это, перейдя в свойства файла и перечислив все жесткие ссылки одного файла. Я ожидаю, что есть решение для кодеров С#, которые могут сделать то же самое без поиска по всему диску.

Редактировать 1:

Есть ли способ проверить два HardLink, если они являются одним и тем же файлом?


person fpdragon    schedule 22.12.2010    source источник
comment
О каких файлах идет речь? Можете ли вы уточнить, что вы подразумеваете под жесткой ссылкой в ​​​​этом случае?   -  person Jonathan Wood    schedule 22.12.2010
comment
Вы ищете способ найти и перечислить все ярлыки для определенного файла? Возможность сделать это без поиска по всему диску зависит от файловой системы.   -  person M. Dudley    schedule 22.12.2010
comment
@Джонатан Вуд: en.wikipedia.org/wiki/Hard_link   -  person Jon    schedule 22.12.2010
comment
Я бы сказал, что слово Hard Link является точным: особый тип точек повторной обработки в NTFS ... ссылка на вики также говорит об этом хорошо.   -  person fpdragon    schedule 22.12.2010
comment
Да, но вы имеете в виду настоящие жесткие ссылки или ярлыки (символические ссылки)? Большинство пользователей Windows даже не знают, что они могут создавать жесткие ссылки.   -  person M. Dudley    schedule 22.12.2010
comment
Я говорю о жестких ссылках. Никаких ярлыков и символических ссылок. Кстати: ярлыки и символические ссылки — это не одно и то же ;)   -  person fpdragon    schedule 22.12.2010
comment
fpdragon: Термин «жесткая ссылка» является точным, но он не означает тип точки повторной обработки. Жесткая ссылка — это просто другое имя для данного файла. Спрашивая, сколько ссылок имеет файл, вы спрашиваете, сколько для него записей в каталоге.   -  person Gabe    schedule 22.12.2010
comment
Вы ищете C#-эквивалент запуска fsutil hardlink list в файле?   -  person Gabe    schedule 22.12.2010


Ответы (1)


Чтобы получить количество ссылок, используйте GetFileInformationByHandle и получите доступ к элементу NumberOfLinks.

Вот пример использования API в VB: http://blogs.msdn.com/b/vbteam/archive/2008/09/22/to-compare-two-filenames-lucian-wischik.aspx

Чтобы найти имена всех ссылок, вам нужно использовать FindFirstFileNameW, но он доступен только начиная с Vista (или Server 2k8), и я не могу найти для него информацию P/Invoke.

person Gabe    schedule 22.12.2010
comment
Хм... спасибо, уже помогает. Поэтому мне нужно найти альтернативу XP для FindFirstFileNameW. - person fpdragon; 23.12.2010