system_complete(path); 返回完整路径(相对路径 + 当前路径)
exists(path); 目录是否存在
is_directory(path);
is_directory(file_status); 是否是路径
is_empty(path); 文件夹是否为空,必须保证路径存在,否则抛异常
is_regular_file(path);
is_regular_file(file_status); 是否是普通文件
is_symlink(path);
is_symlink(file_status); 是否是一个链接文件
file_status status(path); 返回路径名对应的状态
initial_path(); 得到程序运行时的系统当前路径
current_path(); 得到系统当前路径
current_path(const Path& p); 改变当前路径
space_info space(const Path& p); 得到指定路径下的空间信息,space_info 有capacity, free 和 available三个成员变量,分别表示容量,剩余空间和可用空间。
last_write_time(const Path& p); 最后修改时间
last_write_time(const Path& p, const std::time_t new_time); 修改最后修改时间
bool create_directory(const Path& dp); 建立路径
create_hard_link(const Path1& to_p, const Path2& from_p);
error_code create_hard_link(const Path1& to_p, const Path2& from_p, error_code& ec); 建立硬链接
create_symlink(const Path1& to_p, const Path2& from_p);
create_symlink(const Path1& to_p, const Path2& from_p, error_code& ec); 建立软链接
remove(const Path& p, system::error_code & ec = singular); 删除文件
remove_all(const Path& p); 递归删除p中所有内容,返回删除文件的数量
rename(const Path1& from_p, const Path2& to_p); 重命名
copy_file(const Path1& from_fp, const Path2& to_fp); 拷贝文件
omplete(const Path& p, const Path& base = initial_path<Path>()); 以base以基,p作为相对路径,返回其完整路径
create_directories(const Path & p); 建立路径
1. 需要头文件如下:
#include <boost\filesystem.hpp>// vs2015也自带filesystem,但只包含部分功能,它在std::experimental::filesystem下,需要头文件<filesystem>
2. 输出目录下文件名和文件夹名,为了简化using namespace boost;
-
filesystem::path dirpath = "I:\\迅雷下载";
-
filesystem::directory_iterator end;// 只支持本层目录遍历
-
for (filesystem::directory_iterator iter(dirpath); iter != end; iter++)
-
{
-
filesystem::path p = *iter;
-
//std::cout << p.leaf() << std::endl;// 叶子结点文件名
-
//std::cout << p.stem() << std::endl;// 叶子结点文件名(无后缀)
-
//std::cout << p.string() << std::endl;// 文件名(不带引号)
-
std::cout << p.leaf().string() << std::endl;// 叶子结点文件名std::string型
-
}
3. 用递归函数深度优先遍历文件夹
-
// 对文件夹深度优先遍历获取所有文件名放入容器中
-
void getAllFileNames(const std::string & pathName, std::vector<std::string> & vecOut)
-
{
-
using namespace boost::filesystem;
-
path rootPath(pathName);
-
for (directory_iterator iter(rootPath); iter != directory_iterator(); iter++)
-
{
-
if (is_directory(*iter))
-
{
-
getAllFileNames(path(*iter).string(), vecOut);
-
}
-
else
-
{
-
vecOut.emplace_back(path(*iter).string());
-
}
-
}
-
}
-
// 调用递归函数深度优先遍历文件夹
-
std::vector<std::string> files;
-
getAllFileNames("I:\\迅雷下载", files);
-
for (auto name : files)
-
{
-
std::cout << name << std::endl;
-
}
4. 用递归迭代器遍历
-
filesystem::path dirpath2("I:\\迅雷下载");
-
for (filesystem::recursive_directory_iterator iter(dirpath2); iter != filesystem::recursive_directory_iterator(); iter++)
-
{
-
if (filesystem::is_directory(*iter) && iter.level() > 0)// 只在路径的基础上再打开一层文件夹,此时level = 1,遇到文件夹设置no_push()不再深入
-
{
-
iter.no_push();
-
}
-
else if (!filesystem::is_directory(*iter))
-
{
-
std::cout << *iter << std::endl;
-
}// 同理还有pop()方法跳出该目录
-
}
5. 删除文件或空文件夹
-
if (filesystem::remove("I:\\empty"))// 可以删除空文件夹,文件或文件夹不存在返回false,如果文件夹里有文件或文件夹抛异常
-
std::cout << "deleted" << std::endl;
6.删除文件夹及其下全部文件
-
filesystem::path dirpath3("I:\\garbage");
-
if (filesystem::exists(dirpath3))
-
{
-
uintmax_t totalNum = filesystem::remove_all("I:\\garbage");// 返回删除的文件夹和文件数,包括路径本身
-
std::cout << "删除" << totalNum << "个文件或文件夹" << std::endl;
-
}
-
else
-
{
-
std::cout << "路径不存在" << std::endl;
-
}
7. 修改当前目录位置(起初位置是在main.cpp文件夹,用这种方式可以改变)
-
filesystem::current_path("I:\\新建文件夹");
-
std::cout << filesystem::initial_path();
8. 文件转移(本质就是重命名路径)
-
void moveFileToDir(const std::string & file, const std::string & dir)
-
{
-
using namespace boost::filesystem;
-
path oldFilePath(file);
-
create_directories(dir);
-
path newFilePath(dir + "\\" + oldFilePath.leaf().string());
-
rename(oldFilePath, newFilePath);
-
}
-
// 调用文件转移函数
-
if (filesystem::exists("I:\\迅雷下载\\Thunder9.1.25.604.exe"))
-
moveFileToDir("I:\\迅雷下载\\Thunder9.1.25.604.exe", "I:\\temp");