C++11文件目录操作简介

本文介绍C++11引入的文件系统标准库,包括路径操作、文件检查、目录创建与删除等功能,适用于C++17及以后版本。通过实例展示了如何使用path类进行路径解析,以及通用函数如exists、file_size等进行文件属性检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件目录操作有很多方式,有许多Windows API可用,不过用起来不是那么方便。今天说一下C++11提供的文件目录操作的标准库。

头文件与命名空间:

头文件只需要#include <filesystem>

C++11时还在TR2里面

C++11的命名空间std::tr2::sys

C++17时已经正式引入了

C++17的命名空间为std::filesystem

路径类path:

路径使用的是path类,可以直接用字符串构造如:   sys::path test_file("D:\\a\\b.txt");

路径包含许多常用操作,比如

获取根目录root_path()

获取带扩展名的文件名filename()

获取不带扩展名的文件名stem()

获取扩展名extension()

获取父目录parent_path()

是否是绝对路径 is_absolute()

转成字符串string()

通用函数:

文件是否存在exists

文件大小file_size

文件修改时间last_write_time

创建单个目录create_directory

递归创建目录create_directories

删除目录remove_directory

删除文件Remove

递归删除目录remove_all

重命名Rename

拷贝文件copy_file

是否是目录is_directory

目录遍历:

遍历目录可以用迭代器方式遍历:

sys::path src_dir("F:\\download");//或者const string src_dir = "F:\\download";
set<string> dir_set;
for (sys::directory_iterator end, ite(src_dir); ite != end; ++ite)
{
    if(!is_directory(ite->path()))
        dir_set.insert(ite->path().filename().string());
};

另一种是递归遍历目录 只需要把directory_iterator改成recursive_directory_iterator就可以了:

for (sys::recursive_directory_iterator end, ite(src_dir); ite != end; ++ite)
{
    if(!is_directory(ite->path()))
        dir_set.insert(ite->path().filename().string());
}

Filesystem基本上涵盖了常用的文件操作,满足项目需求,还有很多非常用的比如权限、软链接、磁盘空间、目录拼接等等都有,详细的内容可以直接看filesystem头文件或者查看官方文档。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值