如果路径包含符号链接,Windows API 将获取文件属性?

irs*_*sis 4 c c++ windows winapi

我使用_stat64(const char *path, struct __stat64 *buffer);API 来获取文件/目录统计信息,但如果输入路径包含符号链接,则此 API 会失败。

GetFileAttributes()GetFileAttributesEx()如果文件路径包含符号链接,API 也会失败。但正如MSDN 所述,如果路径指向符号链接,则这两个函数返回符号链接的属性。即使_stat64()路径指向符号链接也有效。

如果路径包含[不指向]符号链接,有没有办法获取文件/目录的状态/属性?

例如 -如果输入路径是“D:\temp\ symbolic_link \test”,如何获取“ test ”目录的属性

[Edit1] 由于 eryksun 的评论是有道理的。我再次尝试了 GetFileAttributesEx() 和 _stat64()。它起作用了,但这次我授予了目标目录和符号链接的完全权限。这似乎是权限问题。如果我通过“D:\temp\ symbolic_link ”然后我得到符号链接的属性/统计,如果我通过“D:\temp\ symbolic_link \test”然后我得到预期的测试目录的属性/统计。

Géz*_*rök 5

MSDN 页面都没有说明与您的问题相关的任何内容,但您可能希望通过执行以下操作来获取文件的真实路径:

void realpath(const char *filename, wchar_t *pathbuf, int size)
{
    OFSTRUCT of;
    HANDLE file = (HANDLE)OpenFile(filename,&of,OF_READ);
    GetFinalPathNameByHandle(file,pathbuf,size,FILE_NAME_OPENED);
    CloseHandle(file);
}
Run Code Online (Sandbox Code Playgroud)

这将使用文件的重新解析路径名填充 pathbuf(最多为 size 的长度)。

我希望这有帮助。