C++提供的filesystem提供了丰富的文件操作的类和函数。filesystem 库是一个可移植的文件系统操作相关的库,使用POSIX标准表示文件系统的路径,支持多种操作系统平台,因此使用filesystem可以编写跨平台操作目录,文件的C++程序。
注意:
filesystem 不是C++11标准。 VS2012基于boost TR2的指导实现了filesystem库。
头文件:
#include <filesystem>
std::tr2::sys::path
path类实现路径字符串的基本操作。
//定义一个path对象
std::tr2::sys::path p("d:/test/test.txt");
std::tr2::sys::path p2("mytest.cpp");
std::tr2::sys::path p3;
//转换为字符串
string s = p.string();
//全路径,如果是相对路径定义的path,可以输出全路径
p3 = std::tr2::sys::system_complete(p2);
//父目录
p3 = p.parent_path(); // d:/test
//不含扩展名的文件名
p3 = p.stem(); //test
//文件名,不含路径,带扩展名
p3 = p.filename(); //test.txt
//文件扩展名,带点号
p3 = p.extension(); //.txt
基本操作
//定义一个path对象
std::tr2::sys::path p("d:/test/test.txt");
std::tr2::sys::path p2("mytest.cpp");
std::tr2::sys::path p3;
//当前路径
p3 = std::tr2::sys::current_path();
//判断文件是否存在
bool b = std::tr2::sys::exists(p);
//取文件大小
uintmax_t size = std::tr2::sys::file_size(p);
//获取系统临时文件路径
p3 = std::tr2::sys::temp_directory_path();
//删除文件
bool b2 = std::tr2::sys::remove(p);
//递归删除
bool b3 = std::tr2::sys::remove_all(p);
//复制文件或目录
std::tr2::sys::copy(p1, p2);
//复制文件
bool b4 = std::tr2::sys::copy_file(p1, p2);
//创建目录,支持递归
bool b5 = std::tr2::sys::create_directories(p);
//创建目录
bool b6 = std::tr2::sys::create_directory(p);