Обнаружение символических ссылок, точек соединения, точек монтирования и жестких ссылок
Кто-нибудь знает, как проверить, является ли файл или каталог символической ссылкой, точкой соединения, точкоймонтирования или жесткой ссылкой?
Насколько я знаю, символические ссылки обнаруживаются путем проверки файла на его атрибут "ReparsePoint". Точки соединения определяются путем проверки каталога на наличие атрибута "ReparsePoint". Таким образом, если атрибут "ReparsePoint" установлен для файла, это должна быть символическая ссылка, в противном случае, если он установлен для каталога, он может быть только точкой соединения... верно?
Пока все хорошо, но я до сих пор не знаю, как определять "точки монтирования" и "жесткие ссылки". Может кто-нибудь сказать мне, как это сделать?
3 ответа
Символические ссылки, точки соединения и точки монтирования являются примерами различных точек повторной обработки. Жесткие ссылки, однако, являются обычными файлами. В NTFS все файлы являются жесткими ссылками. Вы можете обнаружить, что файл имеет несколько жестких ссылок, указывающих на него, но нет "реального файла", на который он указывает. Вы можете думать о жестких ссылках как о разных именах одного и того же файла.
Вот некоторая информация о доступе к точкам повторной обработки из C#: http://www.codeproject.com/KB/vista/ReparsePointID.aspx?display=Print
Вот некоторая информация о том, как это сделать в C: http://blog.kalmbach-software.de/2008/02/
Жесткие ссылки:
Вы можете определить, указывают ли несколько имен на один и тот же "блок данных" или "содержимое файла", вызвав функцию Win32 API GetFileInformationByHandle. Член nNumberOfLinks возвращенной структуры BY_HANDLE_FILE_INFORMATION содержит общее количество ссылок
Точки крепления:
Вы можете перебрать все точки монтирования на томе, используя FindFirstVolumeMountPoint и FindNextVolumeMountPoint. Также FindVolumeMountPointClose следует использовать для закрытия дескриптора поиска.
Из.NET
Для этого из.NET потребуется магия P/Invoke
Пожалуйста, смотрите мой вопрос NTFS Junctions, проблемы с пониманием API. Это своего рода дубликат вопроса. Но я объясняю все о том, как точки повторного анализа, точки монтирования, соединения и символические ссылки реализованы с использованием C/C++. Вместо того, чтобы просто давать ссылки на API, вслепую...