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

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

头文件与命名空间:

头文件只需要#include

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 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头文件或者查看官方文档。

你可能感兴趣的:(c++,C,11,文件)