
C++本身的标准库对文件操作支持较好,但对目录操作支持有限。文件操作主要通过fstream头文件中的ifstream和ofstream类完成,而目录操作(如创建、遍历、删除目录)则通常需要借助操作系统相关的API或C++17引入的std::filesystem库。以下是常用的文件与目录操作方法。
使用 std::filesystem(C++17 推荐方式)
std::filesystem是C++17标准中引入的头文件,提供了跨平台的文件系统操作接口,支持路径处理、目录遍历、创建/删除目录等。
包含头文件:
#include
立即学习“C++免费学习笔记(深入)”;
并使用命名空间:
namespace fs = std::filesystem;
常见操作示例:
ECSHOP时尚化妆品商城网站整站系统,基于ECSHOP2.7.3UTF-8版本制作,适合服装,首饰等商城网店使用。 安装方法:1. 下载程序后,删除data目录下的install.lock文件。2.访问:域名/install 按照提示进行安装.3.安装完成后,登陆网站后台---还原数据库4.还原后.模板管理---选择男装模板5.清空缓存6.修改管理员密码.还原数据后,后台信息:用户名:admin
-
创建目录:
fs::create_directory("my_folder");
若目录已存在,不会报错;使用create_directories可递归创建多级目录。 -
检查路径是否存在:
if (fs::exists("my_file.txt")) { /* 存在 */ } -
判断是否为目录:
if (fs::is_directory("my_folder")) { /* 是目录 */ } -
遍历目录内容:
for (const auto &entry : fs::directory_iterator("my_folder")) {
std::cout } -
删除文件或目录:
fs::remove("my_file.txt");
fs::remove_all("my_folder"); // 删除整个目录及其内容 -
获取文件大小:
uintmax_t size = fs::file_size("my_file.txt"); -
重命名文件/目录:
fs::rename("old_name.txt", "new_name.txt");
传统方式:使用 fstream 进行文件读写
对于普通文件的读写,C++标准库提供
-
写入文件:
#include
std::ofstream out("data.txt");
if (out.is_open()) {
out out.close();
} -
读取文件:
std::ifstream in("data.txt");
std::string line;
while (getline(in, line)) {
std::cout }
in.close();
注意:这些操作仅针对文件内容,不涉及目录管理。
跨平台兼容性与编译器支持
std::filesystem要求编译器支持C++17。编译时需启用对应标准:
- GCC/Clang:g++ -std=c++17 main.cpp -lstdc++fs(旧版本可能需要链接-lstdc++fs)
- MSVC(Visual Studio 2019及以上):默认支持C++17,无需额外链接。
若环境不支持C++17,可考虑使用Boost.Filesystem库,其接口与std::filesystem非常相似。
Windows API 和 POSIX 方式(非推荐但可用)
在没有C++17支持的老项目中,可使用系统API:
- Windows:使用CreateDirectory、RemoveDirectory、FindFirstFile等Win32 API。
-
Linux/Unix:使用
中的opendir、readdir等函数。
这类方式代码复杂,且不具备跨平台性,建议优先使用std::filesystem。
基本上就这些。C++17的std::filesystem让文件和目录操作变得简单直观,推荐新项目直接采用。老项目可考虑封装系统调用或引入Boost库过渡。










