std::filesystem::is_regular_file(path)在Windows上是什么意思?

sqxo8psd  于 2023-10-22  发布在  Windows
关注(0)|答案(1)|浏览(133)

关于std::filesystem::is_regular_file(path),cppreference.com says
检查给定的文件状态或路径是否对应于常规文件[...]等效于s.type() == file_type::regular
例如,在Linux内核中,文件类型在头文件sys/stat.h中声明。下面列出了每种Linux文件类型的类型名称和符号名称:

  • 套接字(S_IFSOCK)
  • 符号链接(S_IFLNK)
    *常规文件(S_IFREG)
  • 块特殊文件(S_IFBLK)
  • 目录(S_IFORM)
  • 字符设备(S_IFFRED)
  • FIFO(命名管道)(S_IFIFO)

这个函数在Windows上检查的是什么?

omvjsjqw

omvjsjqw1#

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

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或目录,那么它就是一个普通文件。

相关问题