文件系统库 (自 C++17 起)
来自 cppreference.com
< cpp
文件系统库提供用于执行文件系统及其组件(如路径、常规文件和目录)操作的功能。
文件系统库最初被开发为 boost.filesystem,被发布为 技术规范 ISO/IEC TS 18822:2015,并最终在 C++17 中合并到 ISO C++ 中。boost 实现目前在比 C++17 库更多的编译器和平台上可用。
如果实现无法访问分层文件系统,或者它未提供必要的功能,则可能无法使用文件系统库功能。如果底层文件系统不支持某些功能(例如,FAT 文件系统缺少符号链接并禁止多个硬链接),则这些功能可能不可用。在这种情况下,必须报告错误。
如果对该库中函数的调用引入了 *文件系统竞争*,即当多个线程、进程或计算机交错访问和修改文件系统中的同一对象时,其行为是 未定义的。
内容 |
[编辑] 库范围定义
- 文件:一个文件系统对象,它保存数据,可以写入、读取或两者兼而有之。文件有名称、属性,其中之一是文件类型
- 目录:一个充当目录项容器的文件,这些目录项标识其他文件(其中一些可能是其他嵌套目录)。在讨论特定文件时,它作为条目出现的目录是它的 *父目录*。父目录可以用相对路径名 ".." 表示。
- 常规文件:一个目录项,它将名称与现有文件(即 *硬链接*)相关联。如果支持多个硬链接,则在最后一个指向它的硬链接被删除后,文件将被删除。
- 符号链接:一个目录项,它将名称与路径相关联,该路径可能存在也可能不存在。
- 其他特殊文件类型:块、字符、fifo、套接字。
- 文件名:一个字符串,它命名一个文件。允许的字符、大小写敏感性、最大长度和不允许的名称由实现定义。名称 "."(点)和 ".."(点点)在库级别具有特殊含义。
- 路径:标识文件的元素序列。它以可选的 根名称(例如,Windows 上的 "C:" 或 "//server")开头,后跟可选的 根目录(例如,Unix 上的 "/"),后跟零个或多个文件名序列(除了最后一个文件名以外,所有文件名必须是目录或指向目录的链接)。路径字符串表示形式(路径名)的本机格式(例如,哪些字符用作分隔符)和字符编码由实现定义,此库提供路径的可移植表示形式。
- 绝对路径:一个明确标识文件位置的路径。
- 规范路径:一个绝对路径,它不包含符号链接、"." 或 ".." 元素。
- 相对路径:一个标识文件位置相对于文件系统上某个位置的路径。特殊路径名 "."(点,“当前目录”)和 ".."(点点,“父目录”)是相对路径。
类 | |
定义在头文件
<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) |
表示文件时间值 (typedef) |
非成员函数 | |
定义在头文件
<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) |
返回引用特定文件的硬链接数量 (函数) |
(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) |
检查给定路径是否引用命名管道 (函数) |
(C++17) |
检查参数是否引用其他文件 (函数) |
(C++17) |
检查参数是否引用常规文件 (函数) |
(C++17) |
检查参数是否引用命名 IPC 套接字 (函数) |
(C++17) |
检查参数是否引用符号链接 (函数) |
(C++17) |
检查文件状态是否已知 (函数) |
[编辑] 注释
使用此库可能需要额外的编译器/链接器选项。9.1 之前的 GNU 实现需要链接 -lstdc++fs
,而 9.0 之前的 LLVM 实现需要链接 -lc++fs
。
功能测试 宏 | 值 | Std | 功能 |
---|---|---|---|
__cpp_lib_filesystem |
201703L | (C++17) | 文件系统库 |
[编辑] 另请参阅
C++ 文档 for 文件系统 TS
|