1

我想复制整个文件夹而不解析硬链接

例子:

Folder1
  |
  +---File1
      File2
      HardLink3 -> File3

fsutil hardlink create(使用或创建的 HardLink3 mklink

我想将此文件夹复制到

Folder2
  |
  +---File1
      File2
      HardLink3 -> File3

保持 Folder2\HardLink3 作为指向 File3 的硬链接

是否有 Win32 API 调用来复制具有此语义的整个文件夹,或者,如果我需要逐个文件执行 CopyFile / CreateHardLink 文件,那么检查给定文件是否为硬链接的 API 调用是什么?

4

2 回答 2

2

如果您绝对确定这是您想要做的,那么确定文件是否有多个链接(即“是硬链接”)的最简单方法可能是GetFileInformationByHandle.

对于普通文件,返回的nNumberOfLinks值将是 1,如果文件是(或具有)硬链接,则返回值大于 1。

如果我正确理解了您的情况,检查文件是否硬链接到一组特定文件(“共享文件夹”中的文件)而不是硬链接到任何文件可能更明智任何地方。为此,请查看硬链接与原始文件相同的文件 ID (nFileIndexHigh和)。nFileIndexLow

在后一种情况下,作为一种优化,您可以使用在单个操作中读取给定目录中所有文件的名称和文件 IDGetFileInformationByHandleEx的选项。FileIdBothDirectoryInfo

于 2011-09-16T03:53:12.697 回答
2

我不认为有一个 Win32 API 调用可以一次性完成您想要的所有操作,因此您可能需要手动执行此操作。

检查文件是否是硬链接可能不是您想要做的。如果文件不是符号链接、目录(或重解析点或其他一些模糊的东西),它实际上是一个硬链接,即文件名指向磁盘上存储的文件。因此,如果两个文件指向相同的数据,它们都是指向该文件的硬链接。

无论如何,枚举到文件的所有硬链接的 Win32 方法是 FindFirstFileNameW 和 FindNextFileNameW。

于 2011-09-14T17:21:52.813 回答