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

c00*_*0fd 5 c++ windows filesystems winapi

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

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

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

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

"R:\Documents\Subfolder1"
"\\Server\Home\UserA\Documents\Subfolder1"
"C:\Users\UserA\Documents\Subfolder1"
Run Code Online (Sandbox Code Playgroud)

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

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

Har*_*ton 2

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

请注意,您需要使用该FILE_FLAG_BACKUP_SEMANTICS标志CreateFile才能打开目录的句柄。(您不需要备份权限即可执行此操作。)

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