FindFirstFile和Junctions

mae*_*aep 6 c windows winapi

我用这个去获取目录foo的内容:FindFirstFile(L"foo\\*", &findData).当foo是常规目录时,它工作得很好.但是,当foo是指向另一个目录(创建时mklink /j foo C:\gah)的联结时,FindFirstFile失败.

文档有这样的说法:"如果路径指向符号链接,则WIN32_FIND_DATA缓冲区包含有关符号链接的信息,而不是目标." 但是当我运行调试器时,我只是得到了一个INVALID_HANDLE_VALUE并且findData保持不变.

那么,我该如何解决这个问题呢?

Pra*_*ian 9

Raymond Chen 为您解答.

当被要求提供有关符号链接的信息时,函数GetFileAttributesFindFirstFile返回有关链接本身而不是链接目标的信息.如果使用该 FindFirstFile函数,则可以告诉您具有符号链接,因为文件属性将 FILE_ATTRIBUTES_REPARSE_POINT设置标志,并且该dwReserved0成员将包含特殊值IO_REPARSE_TAG_SYMLINK.

好的,很好,所以现在我知道我有一个符号链接,但如果我想了解链接目标的信息怎么办?例如,我想知道链接目标的大小,其上次修改时间及其名称.

为此,请打开符号链接.I/O管理器取消引用符号链接并为您提供链接目标的句柄.然后GetFileSize, 您可以调用类似的函数GetFileInformationByHandleEx,或GetFinalPathNameByHandle获取有关符号链接目标的信息.