13

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

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

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

4

3 回答 3

12

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

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

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

于 2010-03-21T13:42:53.857 回答
5

硬链接:

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

挂载点:

您可以使用FindFirstVolumeMountPointFindNextVolumeMountPoint遍历卷上的所有挂载点。FindVolumeMountPointClose应该用于关闭搜索句柄。

来自.NET

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

于 2011-02-21T14:53:51.390 回答
2

请看我的问题NTFS Junctions, trouble understand the API。这是问题的重复。但我解释了如何使用 C/C++ 实现重解析点、挂载点、连接点和符号链接。而不是仅仅提供API的链接,盲目地......

于 2011-03-01T18:18:55.320 回答