首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Std::filesystem::is_regular_file(路径)在Windows上意味着什么?

Std::filesystem::is_regular_file(路径)在Windows上意味着什么?
EN

Stack Overflow用户
提问于 2022-04-18 07:15:58
回答 1查看 1.4K关注 1票数 12

关于std::filesystem::is_regular_file(path),cppreference.com 他说

检查给定的文件状态或路径是否与常规文件…对应。相当于s.type() == file_type::regular

例如,在Linux内核中,文件类型在头文件sys/stat.h中声明。下面列出了每种Linux文件类型的类型名称和符号名称:

  • 插座(S_IFSOCK)
  • 符号链接(S_IFLNK)
  • 常规文件 (S_IFREG)
  • 块特殊文件(S_IFBLK)
  • 目录(S_IFDIR)
  • 字符装置(S_IFCHR)
  • FIFO (命名管道) (S_IFIFO)

该函数在Windows上检查的内容是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-18 07:38:07

由于我们讨论的是Windows,所以我们可以考虑标准库的MS实现,这就是它们如何确定文件是否是正常的:

代码语言:javascript
复制
if (_Bitmask_includes(_Attrs, __std_fs_file_attr::_Reparse_point)) {
    if (_Stats._Reparse_point_tag == __std_fs_reparse_tag::_Symlink) {
        this->type(file_type::symlink);
        return;
    }

    if (_Stats._Reparse_point_tag == __std_fs_reparse_tag::_Mount_point) {
        this->type(file_type::junction);
        return;
    }

    // All other reparse points considered ordinary files or directories
}

if (_Bitmask_includes(_Attrs, __std_fs_file_attr::_Directory)) {
    this->type(file_type::directory);
} else {
    this->type(file_type::regular);
}

因此,如果它不是IO_REPARSE_TAG_MOUNT_POINTIO_REPARSE_TAG_SYMLINK或目录,那么它就是一个常规文件。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71908718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档