✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「C/C++」C/C++程序设计 | ||
📚全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
std::filesystem:C++17中的文件系统操作库
引言
在C++17中,标准库引入了一个重要的新特性——std::filesystem
。这个库提供了一系列用于文件系统操作的功能,大大简化了与文件系统相关的编程任务。本文旨在向新手介绍std::filesystem
的作用、使用方法以及注意事项,帮助大家快速上手这一强大的工具。
作用
std::filesystem
库主要用于处理文件和目录的操作,包括但不限于:
- 路径操作:如拼接、解析、检查路径格式等。
- 创建和删除文件夹:使用
create_directory
、remove
、remove_all
等函数。 - 检查文件或文件夹的存在和状态:如
exists
、is_directory
、is_regular_file
等。 - 查询文件大小:使用
file_size
函数。 - 文件复制和移动:如
copy
、copy_file
、move
、rename
等函数。 - 遍历目录:使用
directory_iterator
或recursive_directory_iterator
。 - 获取和设置文件权限:使用
permissions
函数。 - 读取最后一次修改时间:使用
last_write_time
函数。
里面的类
使用方法
-
包含头文件
要使用
std::filesystem
库,首先需要包含<filesystem>
头文件。#include <filesystem> namespace fs = std::filesystem;
-
路径操作
std::filesystem::path
类用于表示文件系统路径,并提供了许多操作符和函数来处理路径。fs::path p1("/mnt/c/Users/Administrator/Desktop"); fs::path p2 = p1 / "papers" / "test.txt"; // 使用 / 来拼接路径 std::cout << "New path: " << p2 << std::endl;
-
检查文件或文件夹的存在
使用
exists
函数可以检查文件或文件夹是否存在。fs::path filePath = p2; if (fs::exists(filePath)) { std::cout << "File exists." << std::endl; } else { std::cout << "File does not exist." << std::endl; }
-
创建和删除文件夹
使用
create_directory
函数可以创建文件夹,使用remove
或remove_all
函数可以删除文件夹或文件。fs::path dirPath = p1 / "new_folder"; if (!fs::exists(dirPath)) { fs::create_directory(dirPath); std::cout << "Directory created." << std::endl; } fs::remove_all(dirPath); // 删除文件夹及其内容
-
遍历目录
使用
directory_iterator
或recursive_directory_iterator
可以遍历目录中的条目。for (const auto& entry : fs::directory_iterator(p1)) { std::cout << entry.path() << std::endl; }
-
文件复制和移动
使用
copy
或move
函数可以复制或移动文件。fs::path sourceFile = p2; fs::path destFile = p1 / "copied_test.txt"; fs::copy(sourceFile, destFile);
注意事项
-
权限检查
在进行文件系统操作时,需要确保程序有足够的权限来访问目标文件或文件夹。否则,可能会导致权限被拒绝的错误。
-
错误处理
std::filesystem
中的许多函数都会抛出std::filesystem::filesystem_error
异常,用于错误处理。因此,在使用这些函数时,最好使用try-catch块来捕获并处理异常。 -
跨平台性
尽管
std::filesystem
提供了一个高级和跨平台的接口,使得文件系统操作更加容易和一致,但其实现细节依赖于操作系统的特定特性和系统调用。因此,在不同平台(如Linux、Windows)之间可能会有所不同。 -
文件编码
std::filesystem
库专注于文件系统的操作,如路径处理、文件的创建和删除、目录遍历等,而不涉及文件内容的具体编码。如果需要处理文件编码,可能需要使用第三方库,如ICU(International Components for Unicode)或Boost的字符串转换功能。
总结
std::filesystem
是C++17中引入的一个重要特性,它提供了一系列用于文件系统操作的功能,大大简化了与文件系统相关的编程任务。通过本文的介绍,相信新手已经对std::filesystem
有了初步的了解,并能够掌握其基本的使用方法。在实际开发中,可以根据需要灵活运用这些功能来处理文件和目录的操作。同时,也需要注意权限检查、错误处理以及跨平台性等注意事项,以确保程序的稳定性和可靠性。