zoukankan      html  css  js  c++  java
  • Boost::filesystem 使用小笔记

    今天拿起手要用C++写个小工具,从指定的目录递归遍历文件,然后做一下处理。又翻了一下boost的filesystem库。小结一下,希望能加深印象,免得下次又要查看文档。

    1. path对象就是一个跨平台的路径对象。有许多方法访问路径的各个部分,也用它的iterator迭代路径中的各个部分; 
         path构造目录结构的时候使用“/”运算符,非常直观。 
         比如path p1; 
         path p2 = p1/"something"; p1 /= "xxx.xxx"; 

    2. filesystem名字空间一下有一些全局的函数,比如exists可以判断path是不是存在,is_directory函数判断是不是目录,file_size获得大小--该大小是一个夸平台的类型,可以表示32位或者64的大小; 
         其他is方法还有: 
         is_empty 
         is_other 
         is_regular_file 
         is_symlink 

    3. 最方便的一个功能是遍历path里的所有内容。directory_iterator。

         path p; 
         directory_iterator(p)就是迭代器的起点,无参数的directory_iterator()就是迭代器的终点。 

    还可以递归迭代,把上面的directory_iterator换成recursive_directory_iterator即可。 

    4. 创建目录。这里特别要提到一个方法是bool create_directories(const path& p);  如果p是一个目录(也就是is_diretory返回true)。它会递归的创建整个目录结构,免去自己一个一个创建的烦恼了。 

         其他创建方法还有: 

         create_directories 
         create_directory 
         create_hard_link 
         create_symlink 

    5. 还可以复制目录  
         copy_directory 
         copy_file 

        copy_symlink


    注意:复制文件的方法copy_file方法在Xcode使用LLVM库的情况下连接的时候会报错,没有找到符号。可以直接用copy方法,该方法自己判断各种情况自动调用对应的方法(比如符号连接,目录,或者普通文件)。

    6. 删除remove 递归删除remove_all

    7. 改名字rename

    8. 如果包含了<boost/filesystem/fstream.hpp>的话,还可以让fstream接受path作为参数。

    BTW,使用filesystem需要编译boost,现在版本只要执行一个脚本就能编译完成了,比以前方便多了。 
    不过,还是要提一下Xcode环境下使用的话,要选择GCC C++ standard library。 

    GCC的哭虽然没有LLVM 的库先进(我是说支持C++11方面),不过,大部分的C++11标准还是支持的。

    目前发现是GCC的库没有std::regex。不过,既然用boost的话那就用boost的regex好了。反正std的也是从boost拿过来而已。

  • 相关阅读:
    Server SQL Modes
    Java 8 New Features
    Spring Boot 企业级应用开发实战 刘伟东-2018年3月第一版
    一步一步学Spring Boot 2 微服务项目实战
    Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷
    深圳宝安图书馆官网错误 HTTP Status 500
    Springboot
    linux 操作 mysql 指定端口登录 以及启动 停止
    PHP 基础
    Magento 总结
  • 原文地址:https://www.cnblogs.com/lidabo/p/3955721.html
Copyright © 2011-2022 走看看