在Windows中,lstat()的替代方法是什么?

8
在Linux中,使用stat()读取损坏的链接文件时会失败并返回-1。因此我使用了lstat(),并且成功了。
同样的问题在Windows中,使用_stat()读取损坏的快捷方式也会失败,但在Windows中没有_lstat()。请帮忙找到在Windows中替代lstat()的方法。
3个回答

9

采纳的答案并没有提供完整的stat等效函数。 stat结构体定义如下:

struct stat {
               dev_t     st_dev;     /* ID of device containing file */
               ino_t     st_ino;     /* inode number */
               mode_t    st_mode;    /* protection */
               nlink_t   st_nlink;   /* number of hard links */
               uid_t     st_uid;     /* user ID of owner */
               gid_t     st_gid;     /* group ID of owner */
               dev_t     st_rdev;    /* device ID (if special file) */
               off_t     st_size;    /* total size, in bytes */
               blksize_t st_blksize; /* blocksize for filesystem I/O */
               blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
               time_t    st_atime;   /* time of last access */
               time_t    st_mtime;   /* time of last modification */
               time_t    st_ctime;   /* time of last status change */
           };

但是GetFileAttributes..没有提供任何所有者信息(它在WIN32_FIND_DATA对象中返回数据)。如果您需要该所有者信息,似乎可以使用GetSecurityInfo [1]。
[1]https://msdn.microsoft.com/en-us/library/windows/desktop/aa446629%28v=vs.85%29.aspx

7

我相信你需要使用GetFileAttributes或者GetFileAttributesEx来获取文件属性(如果我对statlstat的理解是正确的话)。引用文档中的一段话:

链接行为——如果路径指向符号链接,则函数返回符号链接的属性。


4

嘿,_stat()或stat()在损坏的快捷方式上也能正常工作。这就是为什么在Windows中没有像lstat(UNIX)这样的替代方法。

而在Unix中,当链接损坏时,stat()会失败,因此提供了lstat()来解决问题。

感谢大家的帮助。


我假设问题和这个答案是在MSVC运行库的上下文中提出的?无论如何,感谢您发布这个答案,因为它让我不再想知道为什么有人会费力制作一个遵循快捷方式的 _stat(),但却不制作一个不这样做的 _lstat()。我的意思是,前者要做的工作更多,到了这个程度,任何足够聪明的人都应该在过程中有充足的时间意识到他们也需要制作后者。 - SamB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接