【发布时间】:2014-10-14 06:03:26
【问题描述】:
我使用_stat64(const char *path, struct __stat64 *buffer); API 来获取文件/目录统计信息,但如果输入路径包含符号链接,此 API 将失败。
如果文件路径包含符号链接,GetFileAttributes() 和 GetFileAttributesEx() API 也会失败。但是正如MSDN 中提到的,如果路径指向符号链接,这两个函数会返回符号链接的属性。如果路径指向符号链接,即使 _stat64() 也可以工作。
如果路径包含 [not points to] 符号链接,是否有任何方法可以获取文件/目录的状态/属性?
例如 - 如果输入路径为“D:\temp\symbolic_link\test”,如何获取“test”目录的属性
[编辑1] 由于 eryksun 的评论是有道理的。我再次尝试了 GetFileAttributesEx() 和 _stat64()。它有效,但这次我已授予目标目录和符号链接的完全权限。这似乎是权限问题。如果我通过 "D:\temp\symbolic_link" 那么我得到符号链接的属性/统计信息,如果我通过 "D:\temp\symbolic_link\test" 那么我获取预期的测试目录的属性/统计信息。
【问题讨论】:
-
哪个 Windows 版本?
GetFileAttributes在 Windows 7 中为我遍历目录符号链接。 -
@eryksun 我也在 Windows 7 上。您是否将 D:\temp\symbolic_link\test 或 D:\temp\symbolic_link 传递给 GetFileAttributes() ?第一条路径失败,但第二条路径有效。
-
我创建了一个目录符号
mklink /d C:\Source\test\symbolic_link C:\Windows,然后调用GetFileAttributesW(L"C:/Source/test/symbolic_link/System32")。 -
@eryksun 那行得通吗?至少在我的系统中没有。
-
这是我在发表初步评论之前测试过的(32 位和 64 位)。它失败让您感到困惑,因为内核正在进行几乎相同的 I/O 和对象管理器调用,这些调用将解析路径并在其他上下文中打开目录。例如,我不希望您能够在目标目录中创建文件。