Namespaces
Variants

Filesystem library (since C++17)

From cppreference.net

文件系统库提供了对文件系统及其组件(如路径、常规文件和目录)执行操作的功能设施。

文件系统库最初作为 boost.filesystem 被开发,随后以 技术规范 ISO/IEC TS 18822:2015 的形式发布,并最终随 C++17 并入 ISO C++ 标准。目前 boost 实现在支持的编译器和平台范围上仍超过 C++17 标准库。

如果实现无法访问分层文件系统,或者未提供必要功能,则文件系统库设施可能不可用。某些特性在底层文件系统不支持时可能无法使用(例如 FAT 文件系统缺少符号链接并禁止多重硬链接)。这些情况下必须报告错误。

若对此库中函数的调用引入了 未定义行为 ,即当多个线程、进程或计算机交替访问和修改文件系统中的同一对象时,其行为是未定义的。

目录

库级定义

  • file :一种文件系统对象,用于存储数据,可进行写入、读取或同时支持两种操作。文件具有名称和属性,其中文件类型是属性之一:
  • 目录 :作为目录条目容器的文件,这些条目用于标识其他文件(其中一些可能是其他嵌套目录)。在讨论特定文件时,它作为条目出现的目录称为其 父目录 。父目录可通过相对路径名 ".." 表示。
  • 常规文件 :将名称与现有文件关联的目录条目(即 硬链接 )。若支持多硬链接,文件将在最后一个硬链接被移除后删除。
  • 符号链接 :将名称与路径关联的目录条目,该路径可能存在也可能不存在。
  • 其他特殊文件类型: 块设备 字符设备 管道 套接字
  • 文件名 :命名文件的字符串。允许的字符、大小写敏感性、最大长度以及禁止使用的名称由实现定义。名称 "." (点)和 ".." (点点)在库级别具有特殊含义。
  • 路径 :标识文件的一系列元素。它以可选的 root-name (例如 Windows 上的 "C:" "//server" )开头,后跟可选的 root-directory (例如 Unix 上的 "/" ),再后跟零个或多个文件名序列(除最后一个外,其余必须是目录或目录链接)。路径字符串表示形式( pathname )的本机格式(例如使用哪些字符作为分隔符)和字符编码由实现定义,本库提供路径的可移植表示形式。
  • 绝对路径 :明确标识文件位置的路径。
  • 规范路径 :不包含符号链接、 "." ".." 元素的绝对路径。
  • 相对路径 :相对于文件系统中某个位置标识文件位置的路径。特殊路径名称 "." (点号,表示"当前目录")和 ".." (双点号,表示"父目录")均属于相对路径。

定义于头文件 <filesystem>
定义于 命名空间 std::filesystem
(C++17)
表示路径
(类)
文件系统错误时抛出的异常
(类)
目录条目
(类)
指向目录内容的迭代器
(类)
用于遍历目录及其子目录内容的迭代器
(类)
表示文件类型和权限
(类)
(C++17)
文件系统可用空间与总空间信息
(类)
(C++17)
文件类型
(枚举类型)
(C++17)
标识文件系统权限
(枚举类型)
指定权限操作的语义
(枚举类型)
指定复制操作的语义
(枚举)
用于遍历目录内容的选项
(枚举类型)
表示文件时间值
(类型别名)

非成员函数

定义于头文件 <filesystem>
定义于 命名空间 std::filesystem
(C++17)
组合绝对路径
(函数)
组合规范路径
(函数)
组合相对路径
(函数)
(C++17)
复制文件或目录
(函数)
(C++17)
复制文件内容
(函数)
复制符号链接
(函数)
创建新目录
(函数)
创建硬链接
(函数)
创建符号链接
(函数)
返回或设置当前工作目录
(函数)
(C++17)
检查路径是否指向存在的文件系统对象
(函数)
(C++17)
检查两个路径是否指向同一文件系统对象
(函数)
(C++17)
返回文件大小
(函数)
返回指向特定文件的硬链接数量
(函数)
获取或设置最后数据修改时间
(函数)
修改文件访问权限
(函数)
获取符号链接的目标路径
(函数)
(C++17) (C++17)
删除文件或空目录
递归删除文件或目录及其所有内容
(函数)
(C++17)
移动或重命名文件及目录
(函数)
通过截断或零填充更改常规文件的大小
(函数)
(C++17)
确定文件系统上的可用空闲空间
(函数)
(C++17) (C++17)
确定文件属性
确定文件属性,检查符号链接目标
(函数)
返回适用于临时文件的目录
(函数)
文件类型
检查给定路径是否指向块设备
(函数)
检查给定路径是否指向字符设备
(函数)
检查给定路径是否指向目录
(函数)
(C++17)
检查给定路径是否指向空文件或目录
(函数)
(C++17)
检查给定路径是否指向命名管道
(函数)
(C++17)
检查参数是否指向 其他 类型文件
(函数)
检查参数是否指向常规文件
(函数)
(C++17)
检查参数是否指向命名IPC套接字
(函数)
(C++17)
检查参数是否指向符号链接
(函数)
检查文件状态是否已知
(函数)

注释

使用此库可能需要额外的编译器/链接器选项。GNU 9.1 之前的实现需要链接 -lstdc++fs 参数,LLVM 9.0 之前的实现需要链接 -lc++fs 参数。

特性测试 标准 特性
__cpp_lib_filesystem 201703L (C++17) 文件系统库

另请参阅

C++ 文档 关于 文件系统 TS