[C++]文件系统filesystem库
文件系统filesystem库
C++17标准的一个重要补充是filesystem库,它使我们能够处理分层文件系统(如Windows或POSIX的文件系统)中的路径、文件和目录。
1 使用文件系统路径
filesystem库位于 <filesystem>
头文件的 std::filesystem
命名空间中。
文件系统组件(文件、目录、硬链接或软链接)的路径由 path
类表示。
1.1 基本操作
创建路径
1
auto path = std::filesystem::path{"/home/docs"};
添加元素到路径(包含目录分隔符)
通过成员操作符
/=
,非成员操作符/
或者append()
方法将元素附加到路径,包含目录分隔符1
2
3
4
5path /= "Book";
path = path / "Modern" / "Cpp";
path.append("Programming");
// 输出 "/home/docs/book/Modern/Cpp/Programming"
cout << path << endl;添加元素到路径(不包含目录分隔符)
使用成员操作符
+=
、非成员操作符+
或concat()
方法将元素连接到路径,而不包含目录分隔符分解目录
1
2
3
4
5
6
7
8
9
10
11
12
13int main()
{
auto path = filesystem::path{"root/home/docs/file.txt"};
cout
<< "root: " << path.root_name() << '\n'
<< "root dir: " << path.root_directory() << '\n'
<< "root path: " << path.root_path() << '\n'
<< "rel path: " << path.relative_path() << '\n'
<< "parent path: " << path.parent_path() << '\n'
<< "filename: " << path.filename() << '\n'
<< "stem: " << path.stem() << '\n'
<< "extension: " << path.extension() << endl;
}输出:
1
2
3
4
5
6
7
8root: ""
root dir: ""
root path: ""
rel path: "root/home/docs/file.txt"
parent path: "root/home/docs"
filename: "file.txt"
stem: "file"
extension: ".txt"检查目录各个部分
使用成员函数(如
has_root_name()
、has_root_directory()
、has_filename()
、has_stem()
和has_extension()
)获取路径的各部分是否可用1
2
3
4
5
6
7
8
9
10
11
12
13int main()
{
auto path = filesystem::path{"root/home/docs/file.txt"};
cout
<< "has root: " << path.has_root_name() << '\n'
<< "has root dir: " << path.has_root_directory() << '\n'
<< "has root path: " << path.has_root_path() << '\n'
<< "has rel path: " << path.has_relative_path() << '\n'
<< "has parent path: " << path.has_parent_path() << '\n'
<< "has filename: " << path.has_filename() << '\n'
<< "has stem: " << path.has_stem() << '\n'
<< "has extension: " << path.has_extension() << endl;
}输出
1
2
3
4
5
6
7
8has root: 0
has root dir: 0
has root path: 0
has rel path: 1
has parent path: 1
has filename: 1
has stem: 1
has extension: 1检查路径是相对路径还是绝对路径
用
is_absolute()
成员函数检查路径是否是绝对路径修改文件名和扩展名
用
replace_filename()
修改文件名,用remove_filename()
删除文件名,用replace_extension()
修改扩展名将目录分隔符转换为系统首选的分隔符
用
make_preferred()
成员函数将目录分隔符转换为系统首选的分隔符
2 创建、复制和删除文件及目录
filesystem库支持对文件的操作(如复制、移动和删除)以及对目录的操作(如创建、重命名和删除)。
- 使用
create_directory()
创建新目录。如果目录已经存在,则该函数什么都不做。注意,该方法不会递归的创建目录 - 使用
create_directories()
递归的创建新目录。
[C++]文件系统filesystem库
https://erlsrnby04.github.io/2024/11/06/C-文件系统filesystem库/