我正在尝试实现一个在循环中调用 FindFirstFile
和 FindNextFile
的文件夹复制方法,该方法可能会在任何子文件夹上递归调用自身。
为了防止明显的无限循环,我需要确保目标文件夹不是源文件夹的子文件夹。问题是如何做到这一点?我的想法是将 DOS 路径转换为设备特定路径(需要找出方法),但似乎还有更多。
所以我正在针对这种情况进行测试:
我将 My Documents
文件夹设置为重定向到 \\Server\Home\UserA\Documents
的网络共享,而且该文件夹还映射到驱动器R:
在客户端机器上。所以这意味着以下所有文件夹:
"R:\Documents\Subfolder1"
"\\Server\Home\UserA\Documents\Subfolder1"
"C:\Users\UserA\Documents\Subfolder1"
技术上指向相同的物理位置,即 My Documents
的子文件夹。
问题是如何可靠地知道这一点?
最佳答案
使用GetFileInformationByHandle
检索目标目录和每个可能匹配项的卷序列号和文件索引。如果序列号和文件索引相同,则为同一目录。
请注意,您需要在 CreateFile
中使用 FILE_FLAG_BACKUP_SEMANTICS
标志才能打开目录句柄。 (这样做不需要备份权限。)
克隆的卷可能具有相同的序列号(我不确定 Windows 是否会强制更改序列号),因此向用户提供禁用此检查的选项可能是明智的。
关于c++ - 如何判断文件夹是否是递归文件夹复制的子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101311/