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

时间:2014-10-14 06:03:27

标签: c++ c windows winapi

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

如果文件路径包含符号链接,则

GetFileAttributes()GetFileAttributesEx() API也会失败。但正如MSDN所述,如果路径指向符号链接,则这两个函数返回符号链接的属性。如果路径指向符号链接,则偶数_stat64()也可以。

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

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

[EDIT1] 因为eryksun的评论是有道理的。我再次尝试了GetFileAttributesEx()和_stat64()。它工作,但这次我已授予目标目录和符号链接的完全权限。它似乎是许可问题。如果我传递“D:\ temp \ symbolic_link ”,那么我会获得符号链接的属性/统计信息,如果我传递“D:\ temp \ symbolic_link \ test”那么我获取预期的测试目录的属性/统计信息。

1 个答案:

答案 0 :(得分:4)

没有任何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);
}

这将使用文件的重新分析的路径名填充pathbuf(最大为大小)。

我希望这会有所帮助。