我用这个去获取目录foo的内容:FindFirstFile(L"foo\\*", &findData).当foo是常规目录时,它工作得很好.但是,当foo是指向另一个目录(创建时mklink /j foo C:\gah)的联结时,FindFirstFile失败.
文档有这样的说法:"如果路径指向符号链接,则WIN32_FIND_DATA缓冲区包含有关符号链接的信息,而不是目标." 但是当我运行调试器时,我只是得到了一个INVALID_HANDLE_VALUE并且findData保持不变.
那么,我该如何解决这个问题呢?
Raymond Chen 为您解答.
当被要求提供有关符号链接的信息时,函数
GetFileAttributes和FindFirstFile返回有关链接本身而不是链接目标的信息.如果使用该FindFirstFile函数,则可以告诉您具有符号链接,因为文件属性将FILE_ATTRIBUTES_REPARSE_POINT设置标志,并且该dwReserved0成员将包含特殊值IO_REPARSE_TAG_SYMLINK.好的,很好,所以现在我知道我有一个符号链接,但如果我想了解链接目标的信息怎么办?例如,我想知道链接目标的大小,其上次修改时间及其名称.
为此,请打开符号链接.I/O管理器取消引用符号链接并为您提供链接目标的句柄.然后
GetFileSize, 您可以调用类似的函数GetFileInformationByHandleEx,或GetFinalPathNameByHandle获取有关符号链接目标的信息.