boost 库常用功能

boost库文档

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;

 
  1. filesystem::path dirpath = "I:\\迅雷下载";

  2. filesystem::directory_iterator end;// 只支持本层目录遍历

  3. for (filesystem::directory_iterator iter(dirpath); iter != end; iter++)

  4. {

  5. filesystem::path p = *iter;

  6. //std::cout << p.leaf() << std::endl;// 叶子结点文件名

  7. //std::cout << p.stem() << std::endl;// 叶子结点文件名(无后缀)

  8. //std::cout << p.string() << std::endl;// 文件名(不带引号)

  9. std::cout << p.leaf().string() << std::endl;// 叶子结点文件名std::string型

  10. }

 

3. 用递归函数深度优先遍历文件夹

 
  1. // 对文件夹深度优先遍历获取所有文件名放入容器中

  2. void getAllFileNames(const std::string & pathName, std::vector<std::string> & vecOut)

  3. {

  4. using namespace boost::filesystem;

  5. path rootPath(pathName);

  6. for (directory_iterator iter(rootPath); iter != directory_iterator(); iter++)

  7. {

  8. if (is_directory(*iter))

  9. {

  10. getAllFileNames(path(*iter).string(), vecOut);

  11. }

  12. else

  13. {

  14. vecOut.emplace_back(path(*iter).string());

  15. }

  16. }

  17. }

 
  1. // 调用递归函数深度优先遍历文件夹

  2. std::vector<std::string> files;

  3. getAllFileNames("I:\\迅雷下载", files);

  4. for (auto name : files)

  5. {

  6. std::cout << name << std::endl;

  7. }

 

4. 用递归迭代器遍历

 
  1. filesystem::path dirpath2("I:\\迅雷下载");

  2. for (filesystem::recursive_directory_iterator iter(dirpath2); iter != filesystem::recursive_directory_iterator(); iter++)

  3. {

  4. if (filesystem::is_directory(*iter) && iter.level() > 0)// 只在路径的基础上再打开一层文件夹,此时level = 1,遇到文件夹设置no_push()不再深入

  5. {

  6. iter.no_push();

  7. }

  8. else if (!filesystem::is_directory(*iter))

  9. {

  10. std::cout << *iter << std::endl;

  11. }// 同理还有pop()方法跳出该目录

  12. }

 

5. 删除文件或空文件夹

 
  1. if (filesystem::remove("I:\\empty"))// 可以删除空文件夹,文件或文件夹不存在返回false,如果文件夹里有文件或文件夹抛异常

  2. std::cout << "deleted" << std::endl;

 

6.删除文件夹及其下全部文件

 
  1. filesystem::path dirpath3("I:\\garbage");

  2. if (filesystem::exists(dirpath3))

  3. {

  4. uintmax_t totalNum = filesystem::remove_all("I:\\garbage");// 返回删除的文件夹和文件数,包括路径本身

  5. std::cout << "删除" << totalNum << "个文件或文件夹" << std::endl;

  6. }

  7. else

  8. {

  9. std::cout << "路径不存在" << std::endl;

  10. }

 

7.  修改当前目录位置(起初位置是在main.cpp文件夹,用这种方式可以改变)

 
  1. filesystem::current_path("I:\\新建文件夹");

  2. std::cout << filesystem::initial_path();


8. 文件转移(本质就是重命名路径)

 

 
 
  1. void moveFileToDir(const std::string & file, const std::string & dir)

  2. {

  3. using namespace boost::filesystem;

  4. path oldFilePath(file);

  5. create_directories(dir);

  6. path newFilePath(dir + "\\" + oldFilePath.leaf().string());

  7. rename(oldFilePath, newFilePath);

  8. }

 
 
  1. // 调用文件转移函数

  2. if (filesystem::exists("I:\\迅雷下载\\Thunder9.1.25.604.exe"))

  3. moveFileToDir("I:\\迅雷下载\\Thunder9.1.25.604.exe", "I:\\temp");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值