FindFirstFile和Junctions

时间:2011-07-22 23:57:15

标签: c windows winapi

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

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

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

1 个答案:

答案 0 :(得分:9)

Raymond Chen有answer给你。

  当被要求时,

GetFileAttributesFindFirstFile等功能   提供有关符号链接的信息,返回有关的信息   链接本身而不是链接目的地。如果你使用   FindFirstFile函数,你可以告诉你有一个符号链接   因为文件属性会有   FILE_ATTRIBUTES_REPARSE_POINT标志设置和dwReserved0成员   将包含特殊值IO_REPARSE_TAG_SYMLINK

     

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

     

要执行此操作,请打开符号链接。 I / O管理器取消引用   符号链接,为您提供链接目标的句柄。您   然后可以调用像GetFileSize这样的函数,   获得GetFileInformationByHandleExGetFinalPathNameByHandle   有关符号链接目标的信息。