检测符号链接,连接点,挂载点和硬链接

时间:2010-03-21 13:33:06

标签: c# .net windows filesystems reparsepoint

有没有人知道如何检查文件或目录是符号链接连接点挂载点还是硬链接

据我所知,通过检查文件的“ReparsePoint”属性来检测符号链接。 通过检查目录中的“ReparsePoint”属性来检测连接点。因此,如果在文件上设置“ReparsePoint”属性,它必须是符号链接,否则如果在目录上设置它只能是一个连接点......对吗?

到目前为止很好,但我仍然不知道如何检测“挂载点”和“硬链接”。 谁能告诉我怎么做?

3 个答案:

答案 0 :(得分:10)

符号链接,连接点和挂载点都是不同重新分析点的示例。但是,硬链接只是常规文件。在NTFS上,所有文件都是硬链接。您可以检测到文件有多个指向它的硬链接,但它没有指向的“真实文件”。您可以将硬链接视为同一文件的不同名称。

以下是有关从C#访问重新分析点的一些信息:http://www.codeproject.com/KB/vista/ReparsePointID.aspx?display=Print

以下是有关如何在C中执行此操作的一些信息:http://blog.kalmbach-software.de/2008/02/

答案 1 :(得分:5)

硬链接:

您可以通过调用Win32 API函数GetFileInformationByHandle来检测多个名称是否指向相同的“数据块”或“文件内容”。返回的BY_HANDLE_FILE_INFORMATION结构的nNumberOfLinks成员包含链接总数

挂载积分:

您可以使用FindFirstVolumeMountPointFindNextVolumeMountPoint遍历卷上的所有装入点。此外,还应使用FindVolumeMountPointClose来关闭搜索句柄。

来自.NET

从.NET执行此操作需要一些P / Invoke魔法

答案 2 :(得分:1)

请参阅我的问题NTFS Junctions, trouble understanding the API。这是问题的重复。但我解释了如何使用C / C ++实现重分析点,挂载点,连接点和符号链接。盲目地......而不只是给API链接......