文档章节

Boost::filesystem 使用小笔记

子达如何
 子达如何
发布于 2013/02/18 21:38
字数 678
阅读 7.1K
收藏 11

今天拿起手要用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拿过来而已。

【2015年1月8日更新】

升级Xcode到5.0和6.0之后编译一直有链接错误,不好用了,待考察。

[版权所有,转载请注明出处]

本文同时发表在http://blog.csdn.net/dourgulf/article/details/8589207

© 著作权归作者所有

子达如何
粉丝 5
博文 15
码字总数 4697
作品 0
广州
高级程序员
私信 提问
加载中

评论(3)

s
seanyxie

引用来自“子达如何”的评论

引用来自“YiseNet”的评论

qt的QDir也很方便

Qt要不要没落了?方便好用的库其实挺多,只是C++又要编译,又要链接。。。麻烦的很啊
傻逼 那个库不要编译 不要链接
子达如何
子达如何 博主

引用来自“YiseNet”的评论

qt的QDir也很方便

Qt要不要没落了?方便好用的库其实挺多,只是C++又要编译,又要链接。。。麻烦的很啊
Yisen
Yisen
qt的QDir也很方便
Boost库的命名规则

本博客(http://blog.csdn.net/livelylittlefish )贴出作 者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Boost库的命名规则 例如: Win32平台 libboost_filesystem-...

晨曦之光
2012/03/09
601
0
vs2010中使用boost库遍历目录下的文件

vs2010下用c++的boost库写的一个遍历目录下文件夹的程序,运行时报错,如图: 代码如下: #include #include #include #include #include using namespace std; void GetAllFileOfPath(cons...

阿超一代
2014/04/22
1.3K
1
boost::filesystem经常使用使用方法具体解释

提示: filesystem库提供了两个头文件,一个是,这个头文件包括基本的库内容。它提供了对文件系统的重要操作。 同一时候它定义了一个类path。正如大家所想的。这个是一个可移植的路径表示方法...

yxysuanfa
2017/08/20
0
0
C++使用BOOST操作文件、目录

开始使用 在BOOST库出现之前,C++对于文件和目录的操作,大都借助于UNIX提供的底层文件和目录接口,从使用角度来看,这些底层的操作不够友好。BOOST中filesystem库是一种可移植的文件系统操作...

osc_tm2zceka
2018/06/25
10
0
cmake 3.3 中配置boost1.59.0

我的电脑: os:deepin 2014.3 桌面版 64位 cmake:3.3 boost:1.59.0 boost位置:/opt/boost 代码布局: ➜ filesystem tree.├── build├── CMakeLists.txt└── tut1.cpp 1 directory, ......

小代码2016
2015/10/04
8.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

直接显示StackOverflow的答题日期, 增加评论区回复的时间显示 ,修改时间显示到小时分。

// ==UserScript==// @name 直接显示StackOverflow的答题日期, 增加评论区回复的时间显示 ,修改时间显示到小时分。// @namespace http://tampermonkey.net/// @version ...

FalconChen
今天
36
0
Shader笔记_005 纹理

纹理最初的目的就是使用一张图片来控制模型的外观,通过纹理映射技术 我们可以把一张图粘贴在物体表面,逐纹素的控制模型的颜色。 通常美术建模的时候也会在软件里利用纹理展开技术把纹理展开成...

STONE-CITY
今天
12
0
iOS MVVM 与RAC结合使用

MVVM配合 RAC 更能发挥的淋漓尽致。 我们把 MVVM 第一篇的例子 KVO 的事件 替换成 配合RAC 框架使用, OC的话直接导入 : pod 'ReactiveObjC' Swift 直接用 RXSwift就可以。 把 ViewModel里加...

T型人才追梦者
今天
22
1
OSChina 周一乱弹 —— 影响心情的三座大山

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《浮生(inst.)》- 忘乡 / 墨凡悦 手机党少年们想听歌,请使劲儿戳(这里) @凝小紫...

小小编辑
今天
55
0
Unity中头发渲染

头发与普通PBR 材质最大的区别是 头发是各项异性的高光, 参考实现主要为下面文章 http://web.engr.oregonstate.edu/~mjb/cs519/Projects/Papers/HairRendering.pdf 头发包含 2个高光,以及高...

liyong2
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部