filesystem库是文件系统操作库,可以使用其中的basic_path类用来操作目录、文件,使用需要包含编译好的system库和filesystem库,我们一般不直接使用basic_path,而是使用typedef : path和wpath。 使用它需要包含"boost/filesystem.hpp"。

    boost::filesystem::path p1("D:\\dir"); //windows下既可使用斜杠也可使用反斜杠(资源管理器地址栏中使用的就是反斜杠),又因为在c++中反斜杠是转义字符的标志,所以使用反斜杠的话还得再加一个反斜杠
boost::filesystem::path p2("D:/dir/data.dat"); //windows下推荐使用正斜杠
boost::filesystem::path p3("/user/dir"); //linux下使用正斜杠
boost::filesystem::path p4 = "./dir"; //path的构造函数没有声明为explicit,字符串可以隐式转换为path对象 p1 /= "child"; //path重载了 /=,其功能与成员append()相同。
cout << p1 << endl; //支持流输出操作,输出为"D:\dir\child" if (p1 == p2); //支持比较操作
auto iter = p1.begin(); //支持迭代器来迭代其中的字符串 std::string strDir = p1.string(); //获取字符串(构造函数中传入的字符串为相对路径的话这里也是相对路径)
bool bRes = boost::filesystem::portable_posix_name(strDir); //判断是否符合posix文件命名规范
boost::filesystem::windows_name(strDir); //判断是否符合windows文件命名规范
boost::filesystem::portable_name(strDir); //相当于portable_posix_name() && windows_name
boost::filesystem::native(strDir); //在windows下相当于windows_name,其它操作系统下只是简单的判断文件名不是空格且不含斜杠 boost::filesystem::path parentPath = p3.parent_path(); //获得父路径
    boost::filesystem::path parentPath = p3.system_complete(); //获得全路径(绝对路径)
    std::string name = p2.filename().string(); //文件名: data.dat
std::string s = p2.stem().string(); //不含扩展名的文件名: data
std::string extName = p2.extension().string(); //扩展名: dat p1.is_complete(); //是否是一个完整的绝对路径
p1.relative_path(); //获得path的相对路径 boost::filesystem::path p("C:/xxx/yyy");
p1.root_path(); //根路径: "C:/"
p1.root_name(); //根名字:"C:"
p1.root_directory(); //根目录: "/" p1.remove_filename(); //删除当前路径中最后的文件名
p1.replace_extension("hxx"); //改变文件扩展名 // filesystem使用异常来处理文件操作时发生的错误,所以使用的时候应该加上异常处理
try
{
boost::filesystem::file_size(p1); //获得文件大小,文件不存在则会抛出异常
}
catch (boost::filesystem::filesystem_error& e)
{
cout << e.path1() << endl;
cout << e.what() << endl;
} boost::filesystem::exists(p1); //是否存在
boost::filesystem::is_directory(p1); //是否是目录
boost::filesystem::is_regular_file(p1); //是否是普通文件
boost::filesystem::is_empty(p1); //目录是否为空或文件大小是否为0
boost::filesystem::is_symlink(p1); //是否为链接文件
boost::filesystem::is_other(p1); //当文件存在且不是普通文件、目录或链接文件时返回true,其它文件类型可以通过文件状态类file_status获得 boost::filesystem::current_path(); //获得当前路径
boost::filesystem::initial_path(); //获得进入main函数时的当前路径
boost::filesystem::last_write_time(p1); //获得文件最后修改时间
boost::filesystem::space(p1); //获得路径下磁盘空间分配情况 boost::filesystem::remove(p1); //删除文件或空目录
boost::filesystem::remove_all(p1); //删除目录
boost::filesystem::create_directory(p1); //创建一级目录
boost::filesystem::create_directories(p1); //创建多级目录
boost::filesystem::copy_file(p1, p2); //拷贝
boost::filesystem::rename(p1, p2); //改名 void recursive_dir(const boost::filesystem::path& dir)
{
//使用directory_iterator递归遍历目录
boost::filesystem::directory_iterator end; //空的directory_iterator构造函数生成一个指向end的迭代器
boost::filesystem::directory_iterator pos(p1); //传入一个path对象后可以使用++开始迭代操作
for (; pos != end; pos++)
{
if (boost::filesystem::is_directory(*pos))
recursive_dir(*pos); //directory_iterator迭代器返回的类型其实不是path,但它定义了一个到path的类型转换函数,因此这里是隐式转换
else
cout << *pos << endl; //输出文件名
}
} //directory_iterator不支持深度遍历,可以使用效率更高的recursive_directory_iterator或wrecursive_directory_iterator
typedef boost::filesystem::recursive_directory_iterator rd_iterator;
rd_iterator end;
rd_iterator pos(p1);
for (; pos != end; pos++)
{
//if (boost::filesystem::is_directory(*pos))
//pos.no_push(); //退出当前目录层次的遍历,相当于使用directory_iterator cout << pos.level() << endl; //获得当前目录深度
cout << *pos << endl; //输出文件名
}

boost--文件、目录操作的更多相关文章

  1. Linux 文件/目录操作详解

    目录 Linux 文件/目录操作详解 初识Linux 一.文件/目录显示命令 ls 二.目录创建命令 mkdir 三.目录转移命令 cd 四.当前目录显示命令 pwd 五.文件处理命令 rmdir 六 ...

  2. Python - os 文件/目录操作

    最近经常用到 os 操作文件/目录,感觉挺好使的,但是一直没有系统的梳理学习一下, 今天想借此机会整理一下工作中常用的方法,也算自己总结学习的一个积累吧. 直接上代码,注释明了 #-*-coding: ...

  3. 《UNIX-Shell编程24学时教程》读书笔记Chap3,4 文件,目录操作

    Chap3 文件操作   P28 在这章中,要着重记住一些常用的选项,要有使用正则表达式的思维,能更快达到目的.----@im天行 3.1 列文件名 .profile  sh的初始化脚本: .kshr ...

  4. Python技法:实用运维脚本编写(进程/文件/目录操作)

    Python在很大程度上可以对shell脚本进行替代.笔者一般单行命令用shell,复杂点的多行操作就直接用Python了.这篇文章就归纳一下Python的一些实用脚本操作. 1. 执行外部程序或命令 ...

  5. Linux 指令(一)文件/目录操作

    1. 创建目录 mkdir 格式 mkdir [OPTION]... DIRECTORY... 选项 -p 递归创建 -v 创建时提示 例: root@ubuntu:/home/eko/x# mkdi ...

  6. Delphi中ExtractFilePath、ParamStr以及更多文件/目录操作涉及的函数。附加对应的例子

    先介绍ExtractFilePath和ParamStr ParamStr 该函数的原型是:function paramstr(i: Integer): String; 对于任何的application ...

  7. ACE6.2.0文件/目录操作

    文件读取.#include "ace/FILE_Connector.h"#include "ace/FILE_IO.h"void fileRW(){ACE_FI ...

  8. php对文件/目录操作的基础知识(图解)

    具体的如下图所示:

  9. 【C#公共帮助类】FTPClientHelper帮助类,实现文件上传,目录操作,下载等动作

    关于本文档的说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利. 本人自从几年前走上编程之路,一直致力于收集 ...

  10. PHP 文件与目录操作函数总结

    >>>文件操作 打开 fopen();    打开文件 读取内容 fread();    从文件指针 handle 读取最多 length 个字节 readfile();    读入 ...

随机推荐

  1. Linux网络编程学习(十) ----- Socket(第六章)

    前言:由于第五章主要介绍了TCP和UDP协议以及两者的包头的字段以及相应的功能,这里就不介绍了,对着字段看功能就好了,后续开始学习第六章 1.Socket Socket实质上就是提供了通信的端点,每个 ...

  2. mysql导入太慢解决方法

    半调子数据科学家又要折腾数据,拿到数据一看,3.6G的zip文件,解压看看,卧槽12个G的sql文件.好吧,又要折腾sql数据了.第一件事,肯定是搭一个数据库,导入数据咯. 折腾过sql导入的亲们都知 ...

  3. Longest Palindrome 最长回文串问题

    1.题目 Given a string s, find the longest palindromic substring in s. You may assume that the maximum ...

  4. MVC过滤器使用方法

    先介绍下什么是过滤器:ASP.NET MVC中的灭一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理,这时就用到了过滤器. MVC支持的过滤器有 ...

  5. java 与 CDH kafka集成

    本文主要是通过在网上找到的例子进行演示: 一.说明      开发环境如下:      idea + jdk 1.8 + maven      maven 中引用的架包如下: 二. 生产者 impor ...

  6. Jquery+H5验证数据(不是表单验证啊 )

    啥也不说了 直接上代码 1.我将所有需要验证的控件都加上了   required(类名自己定吧没啥讲究)  class 2.所有的控件都加上了 data-vname的H5自定义属性(名称自个定义吧) ...

  7. AFNetworking Delete请求,报参数为空的错误

    使用AFNetWorking进行网络请求的时候,AFNetWorking会默认把get head delete这三个方法的请求参数拼到了url的后面,然后造成body为空,一行代码解决: manage ...

  8. Zookeeper配置文件

    zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg.其中各配置项的含义,解释如下: 1.tickTime:Client-Serv ...

  9. Echart遇到的问题:tooltip提示框大小异常

    将Echart图表放到项目中,发现当鼠标放到柱状图上时,提示框显示大小超出了div的大小. 官方的文档对于tooltip的说明也没有指出:如何修改大小. 那么tooltip是什么呢? fn+f12打开 ...

  10. 在centos7 部署bbr

    How to Deploy Google BBR on CentOS 7 Published on: Thu, Jan 5, 2017 at 6:34 pm EST CentOS Linux Guid ...