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



关于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 (named pipe) (S_IFIFO)

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

既然我们谈论的是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_POINT,IO_REPARSE_TAG_SYMLINK或者一个目录,那么它就是一个常规文件。

相关内容

  • 没有找到相关文章

最新更新