Ответы с форумов MSDN

Работа с папками-ссылками в Windows

Date: 01.02.2020 8:18:31

"С помощью DirectoryInfo и GetDirectories можно получить список папок в каталоге. При вызове для папки "с:\" мы получаем среди прочих "папку-ссылку", которой не существует в реальности, например: "Documents and Settings". Как для такой "папки-ссылки" получить реальный путь."

Конкретно Documents and Settings - это Junction. Как получить реальный путь для Junction описано например здесь: https://www.codeproject.com/Articles/21202/Reparse-Points-in-Vista. Но учтите, что это не единственный тип "папки-ссылки" в Windows.

"Подскажите, где чего почитать, чтоб не писать бредовое слово "папка-ссылка" и правильно такие ссылки обрабатывать?"

Устоявшейся русскоязычной терминологии для NTFS-ссылок нет, потому что это довольно низкоуровневая концепция, и документация по ним по большей части не локализована. По ссылке выше вы сами можете увидеть, что работа с Junction требует отправки IOCTL драйверу файловой системы, с Hard links все примерно так же. Англоязычные разделы документации вот: 

Symbolic Links

Hard Links and Junctions

Как правильно обрабатывать? Я бы сказал, никак. ОС автоматически все делает за вас, прозрачно превращая ссылки в реальные пути, т.е. код File.ReadAllText(@"C:\Documents and settings\Vasya\Documents\myfile.txt");  автоматически прочитает файл "C:\Users\Vasya\Documents\myfile.txt". При выводе списка файлов пользователю, просто скройте ссылки (они и так по большей части являются скрытыми файлами и проводник не показывает их, пока мы его об этом не попросим). Если вы не пишете специфическое системное ПО, вы не должны заморачиваться с NTFS-ссылками.

Message 133

Date: 01.02.2020 8:22:37

Ну и в дополнение, кто не хочет заморачиваться с IOCTL, можно попробовать парсить вывод cmd. Команда dir /al выводит информацию о ссылках:

c:\>dir /al
 Том в устройстве C не имеет метки.
 Серийный номер тома: 489A-49E7

 Содержимое папки c:\

14.07.2009  10:08    <JUNCTION>     Documents and Settings [C:\Users]
               0 файлов              0 байт
               1 папок   1 063 370 752 байт свободно


Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub