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