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