【问题标题】:What is lstat() alternative in windows?Windows 中的 lstat() 替代方法是什么?
【发布时间】:2012-08-18 14:56:29
【问题描述】:

在 linux 中,当 stat() 与损坏的链接文件一起使用时,它会以 -1 失败。所以我用lstat() 成功了。

对于 Windows 中的相同情况,_stat() 因快捷方式损坏而失败,但 Windows 中没有 _lstat()。请帮助在 Windows 中找到 lstat() 的替代方案。

【问题讨论】:

    标签: c stat


    【解决方案1】:

    接受的答案未提供完整的 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

    【讨论】:

      【解决方案2】:

      GetFileAttributesGetFileAttributesEx 可能(如果我理解 statlstat 对)。引用文档:

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

      【讨论】:

        【解决方案3】:

        嘿 _stat() 或 stat() 也适用于损坏的快捷方式。这就是原因,在windows中没有像lstat(UNIX)这样的替代品。

        在 Unix 中,stat() 因链接断开而失败,因此提供了 lstat 来解决问题。

        感谢大家的帮助。

        【讨论】:

        • 我假设这个问题和这个答案是在 MSVC 的运行时库的上下文中提出的?无论如何,感谢您发布此答案,因为它使我免于思考为什么有人会费心制作一个遵循快捷方式的_stat(),而不是制作一个不这样做的_lstat()。我的意思是,前者需要很多工作,以至于任何足够聪明的人都应该在这个过程中有足够的时间来意识到他们也让后者变得必要。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多