c++ - 如果路径包含符号链接(symbolic link),Windows API 获取文件属性?

标签 c++ c windows winapi

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

如果文件路径包含符号链接(symbolic link),

GetFileAttributes()GetFileAttributesEx() API 也会失败。但正如 MSDN 中所述, 如果路径指向一个符号链接(symbolic link),这两个函数返回符号链接(symbolic link)的属性。如果路径指向符号链接(symbolic link),甚至 _stat64() 也能工作。

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

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

[编辑1] 由于 eryksun 的评论是有道理的。我再次尝试了 GetFileAttributesEx() 和 _stat64() 。它起作用了,但这次我授予了对目标目录和符号链接(symbolic link)的完全权限。这似乎是许可问题。如果我通过“D:\temp\symbolic_link”,那么我会得到符号链接(symbolic link)的属性/统计信息,如果我通过“D:\temp\symbolic_link\test”,那么我获取预期的测试目录的属性/统计信息。

最佳答案

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(最大长度为 size)。

希望对您有所帮助。

关于c++ - 如果路径包含符号链接(symbolic link),Windows API 获取文件属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26353673/

相关文章:

c++ - 二维数组中的特殊多边形for循环

c - 监视 linux 内核中上下文切换次数的最有效方法是什么?

c - 为什么使用 malloc?

c++ - 分配初始化、对齐的内存

php如何将mac路径转换为windows?

windows - 如何从 puppet list 中卸载在 Windows 客户端中运行的 exe 文件

c++ - 在 C++ 中将输出写入文件的问题

C++,尝试打印整数时cout的奇怪行为

c# - 如何将 C++ *.lib 文件转换为不安全的 C# 互操作?

java - 在任何计算机上创建或读取文件