Как обнаружить рекурсивно связанные каталоги?

Учитывая следующий сценарий: у меня есть клиент Windows, который подключен к общему ресурсу SMB. Я хочу рекурсивно погрузиться в каталоги на этом общем ресурсе, чтобы что-то сделать с файлами (представьте, что для них вычисляются хэши sha1, если превышен определенный размер).

Что я обычно делаю: рекурсивно dirInfo.EnumerateDirectories() ловит некоторые исключительные случаи, такие как несанкционированный доступ, и помещаю файлы в очередь в поток оператора (чтобы затем вычислить sha1).

Проблема: Рекурсивные символические ссылки. Мой сценарий тестирования довольно прост

me@smb:~$ ls -l /home/me/tmp/recursionStartsHere
lrwxrwxrwx recursion -> /home/me/tmp/recursionStartsHere

Я пробовал (кроме googlin) использовать dirInfo.Attributes.HasFlag(FlagAttributes.ReparsePoint) для обнаружения символических ссылок, что (конечно) не работает. Подход грубой силы похож на индексацию каждого каталога с накопленной контрольной суммой из их содержимого, которое может даже не быть свободным от коллизий.

Поскольку у меня сейчас нет практических идей, как я могу сказать, что определенный каталог является (только) символической ссылкой? Конечно, я бы предпочел независимую от платформы, поэтому мой код работает так же для удаленного SMB, как а также на локальных NTFS-дисках.


person mbx    schedule 21.06.2013    source источник


Ответы (1)


Есть интересная запись в блоге Троя:

http://troyparsons.com/blog/2012/03/symbolic-links-in-c-sharp/

Хотя не знаю, работает ли он с акциями SMB.

person fan711    schedule 21.06.2013
comment
Хотя это хороший способ указать цель в NTFS, он не работает для рекурсивно связанных каталогов на общем ресурсе smb. - person mbx; 22.06.2013
comment
Ссылка не работает, поэтому в ответе нет никакой информации. - person Ed Bayiates; 01.04.2019
comment
Поскольку статья довольно длинная, я размещаю здесь ссылку на архив вместо обновления ответа: https://web.archive.org/web/20180205072300/http://troyparsons.com/blog/2012/03/symbolic-links-in-c-sharp/ Честно говоря, я не вспомнить подробности по прошествии этих лет;) - person fan711; 16.04.2019