如何判断文件夹是否是递归文件夹副本的子文件夹?

时间:2014-06-07 20:30:16

标签: c++ windows winapi filesystems

我正在尝试实现一个在循环中调用FindFirstFileFindNextFile的文件夹复制方法,它可以在任何子文件夹上递归调用自身。

为了防止出现明显的无限循环,我需要确保目标文件夹不是源文件夹的子文件夹。问题是如何做到这一点?我的想法是将DOS路径转换为特定于设备的路径(需要了解如何),但似乎还有更多。

所以我正在测试它的情况:

我将My Documents文件夹设置为重定向到网络共享\\Server\Home\UserA\Documents,此外,该文件夹也会映射到客户端计算机上的驱动器R:。这意味着所有以下文件夹:

"R:\Documents\Subfolder1"
"\\Server\Home\UserA\Documents\Subfolder1"
"C:\Users\UserA\Documents\Subfolder1"

技术上指向相同的物理位置,即My Documents的子文件夹。

问题是如何可靠地了解这一点?

1 个答案:

答案 0 :(得分:2)

使用GetFileInformationByHandle检索目标目录的卷序列号和文件索引以及每个可能的匹配项。如果序列号和文件索引都相同,则它们是同一目录。

请注意,您需要使用FILE_FLAG_BACKUP_SEMANTICS中的CreateFile标志才能打开目录句柄。 (您不需要备份权限。)

克隆卷可能具有相同的序列号(我不确定Windows是否强制更改序列号),因此向用户提供禁用此检查的选项可能是明智之举。

相关问题