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

What does std::filesystem::is_regular_file(path) mean on Windows?

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

Checks if the given file status or path corresponds to a regular file […] Equivalent to s.type() == file_type::regular.

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

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

既然我们在谈论Windows,我们可以考虑标准库的MS implementation,这就是他们判断文件是否正常的方式:

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