如何在Windows 7中以编程方式区分硬链接和真实文件?

时间:2010-09-03 14:40:26

标签: c++ windows-7 hardlink

我在文件大小和已用磁盘空间之间存在差异(总文件大小甚至超过磁盘大小)。我想因为在Windows 7 / Vista中存在许多硬链接(对于WinSxS组件)。但是,如何以编程方式将硬链接与Windows 7中的真实文件区分开来?

3 个答案:

答案 0 :(得分:5)

你不能,因为所有文件都是硬链接。不完全是。文件只是数据块的硬链接 - 目录中的列表。 (也许你的意思是符号链接?你可以区分那些......)

使用Windows提供的内置方法代替计算已用空间。

编辑:Reference(强调我的)

  

链接本身只是一个目录条目,并且没有安全描述符。因此,当您更改硬链接的安全描述符时,您可以更改基础文件的安全描述符,并且指向该文件的所有硬链接都允许新指定的访问。

答案 1 :(得分:2)

无法区分硬链接和“真实文件”。 “真实文件”的目录条目只是另一个硬链接。也许你的意思是一个象征性的联系。

POSIX有stat函数(在Windows中称为_stat),它可以检测到同一文件的多个链接,这些文件具有相同的“inode”编号。

答案 2 :(得分:1)

使用GetFileInformationByHandle()并检查返回的BY_HANDLE_FILE_INFORMATION nNumberOfLinks成员的值> 1。