我想在不解析硬链接的情况下复制整个文件夹
示例:
Folder1
|
+---File1
File2
HardLink3 -> File3
(使用fsutil hardlink create
或mklink
创建的HardLink3)
我想将此文件夹复制到
Folder2
|
+---File1
File2
HardLink3 -> File3
将Folder2 \ HardLink3保留为指向File3的硬链接
是否有Win32 API调用来复制整个文件夹 这个语义,或者,如果我需要做CopyFile / CreateHardLink 逐个文件,检查给定文件是什么的API调用 是否有硬链接?
答案 0 :(得分:2)
我认为没有Win32 API调用可以一次性完成您想要的操作,因此您可能需要手动执行此操作。
检查文件是否是硬链接可能不是您想要做的。如果文件不是符号链接,目录(或重新分析点或其他一些模糊的东西),它实际上是一个硬链接,即文件名指向磁盘上存储的文件。因此,如果两个文件指向相同的数据,则它们都是该文件的硬链接。
无论如何,枚举文件所有硬链接的Win32方法是FindFirstFileNameW和FindNextFileNameW。
答案 1 :(得分:2)
如果您完全确定这是您想要做的,确定文件是否有多个链接(即“是一个硬链接”)的最简单方法可能是GetFileInformationByHandle
。
对于普通文件,返回的nNumberOfLinks
值将为1;如果文件是(或具有)硬链接,则返回的值大于1。
如果我已正确理解您的场景,那么检查文件是否与某个特定文件集(“共享文件夹”中的文件)之间的硬链接可能更为明智,而不是它是否是硬链接任何地方的任何文件。要执行此操作,请查看文件ID(nFileIndexHigh
和nFileIndexLow
),其中硬链接与原始文件相同。
在后一种情况下,作为优化,您可以使用GetFileInformationByHandleEx
和FileIdBothDirectoryInfo
选项在单个操作中读取给定目录中所有文件的名称和文件ID。