filesystem
包含标头 <filesystem>
,用于访问操作和检索有关路径、文件和目录的信息的类和函数。
语法
#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;
重要
在 Visual Studio 2017 发布时,<filesystem>
标头尚不是 C++ 标准。 Visual Studio 2017 RTW 中的 C++ 实现了最终草案标准,可在 ISO/IEC JTC 1/SC 22/WG 21 N4100 中找到。 Visual Studio 2017 版本 15.7 及更高版本支持新的 C++17 <filesystem>
标准。
这是一个全新的实现,与以前的 std::experimental
版本不兼容。 这是符号链接支持、bug 修复和标准要求行为更改所必需的。 在 Visual Studio 2019 版本 16.3 及更高版本中,包含 <filesystem>
只提供新的 std::filesystem
。 包含 <experimental/filesystem>
只提供旧的 experimental 实现。 在下一突破性 ABI 版本的库中,experimental 实现将被删除。
此标头支持两大类主机操作系统(即 Microsoft Windows 和 POSIX)之一的文件系统。
虽然这两种操作系统的大多数功能均相同,但本文档将介绍它们之间存在的差异。 例如:
Windows 支持多个根名称,例如
c:
或\\network_name
。 文件系统由树林组成,每个树都有其自己的根目录(例如c:\
或\\network_name\
),且每个树都有其自己的当前目录,用于完善相对路径名(非绝对路径名)。POSIX 支持不具有根名称的单个树、单个根目录
/
和单个当前目录。
另一个重要差异是路径名的本机表示方式:
Windows 使用以 null 结尾的
wchar_t
序列,编码为 UTF-16(每个字符的一个或多个元素)。POSIX 使用以 null 结尾的
char
序列,编码为 UTF-8(每个字符的一个或多个元素)。类
path
的对象以本机形式存储路径名,但支持在此存储形式与多种外部形式之间进行简单转换:以 null 结尾的
char
序列,编码为操作系统偏好的形式。以 null 结尾的
char
序列,编码为 UTF-8。以 null 结尾的
wchar_t
序列,编码为操作系统偏好的形式。以 null 结尾的
char16_t
序列,编码为 UTF-16。以 null 结尾的
char32_t
序列,编码为 UTF-32。
通过使用一个或多个
codecvt
facet,按需调节这些表示形式之间的相互转换。 如果未指定特定的区域设置对象,则将从全局区域设置获取这些 facet。
另一个差别是每个操作系统允许你用于指定文件或目录访问权限的详细信息:
Windows 记录文件是只读还是可写,此属性对于目录没有意义。
POSIX 记录文件是否可读、可写或可执行(如果是目录,则为是否可扫描)。 而且,是否允许所有者、所有者组或每个人执行每个操作,以及其他一些权限。
两个系统的共同点是通过根名称后施加于路径名的结构。 对于路径名 c:/abc/xyz/def.ext
:
根名称为
c:
。根目录为
/
。根路径为
c:/
。相对路径为
abc/xyz/def.ext
。父级路径为
c:/abc/xyz
。文件名为
def.ext
。主干为
def
。扩展名为
.ext
。
一个细微的差别是路径名中目录序列之间的首选分隔符。 两个操作系统都允许写入正斜杠 /
,但在某些上下文中 Windows 偏好反斜杠 \
。 实现将其首选分隔符存储在 path
的数据成员 preferred_separator
中。
最后,path
对象有一项重要功能:当文件名参数为标头 <fstream>
中定义的类所需时,即可使用这些对象。
有关详细信息和代码示例,请参阅文件系统导航 (C++)。
成员
类
“属性” | 描述 |
---|---|
directory_entry 类 |
描述 directory_iterator 或 recursive_directory_iterator 返回的对象,并包含 path 。 |
directory_iterator 类 |
描述通过文件系统目录中的文件名排序的输入迭代器。 |
filesystem_error 类 |
所引发以报告低级系统溢出的异常的基类。 |
path 类 |
定义一个类,该类存储适合用作文件名的模板类型 String 的对象。 |
recursive_directory_iterator 类 |
描述通过文件系统目录中的文件名排序的输入迭代器。 迭代器还可以降到子目录中。 |
file_status 类 |
包装 file_type 。 |
结构
名称 | 描述 |
---|---|
space_info 结构 |
保存有关卷的信息。 |
函数
运算符
枚举
名称 | 描述 |
---|---|
copy_options |
如果目标文件已存在,则与 copy_file 一起使用的枚举将决定行为。 |
directory_options |
为目录迭代器指定选项的枚举。 |
file_type |
文件类型的枚举。 |
perm_options |
枚举 permissions 函数的选项。 |
perms |
用于传达权限和权限选项的位掩码类型 |