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拿过来而已。

时间: 2024-09-20 13:33:37

Boost::filesystem 使用小笔记的相关文章

C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem

原帖:https://tokyo.zxproxy.com/browse.php?u=uG7kXsFlW1ZmaxKEvCzu8HrCJ0bXIAddA1s5dtIUZ%2FYzM1u9JI7jjKLTXvXJlIqeavUo1Ak%3D&b=6   如果要在 C++ 裡對特定的檔案做存取,其實透過 STL 的 fstream(參考)來做,一般是不會有什麼問題的:相對的,問題比較大的部分,可能會是在於對於資料夾(folder.directory)的處理,以及對於路徑的操作上.像是以路徑來說,Win

boost filesystem memory leak!

问题描述 boost filesystem memory leak! int main(int argc, char* argv[]) { _CrtSetBreakAlloc(284); { boost::filesystem::path p(argv[0]); std::string b = p.extension().generic_string();; } _CrtDumpMemoryLeaks(); return 0; } 下面是output显示的内容, 分两部分, 一部分是用_CrtD

boost asio io_service学习笔记

构造函数 构造函数的主要动作就是调用CreateIoCompletionPort创建了一个初始iocp. Dispatch和post的区别 Post一定是PostQueuedCompletionStatus并且在GetQueuedCompletionStatus 之后执行. Dispatch会首先检查当前thread是不是io_service.run/runonce/poll/poll_once线程,如果是,则直接运行. poll和run的区别 两者代码几乎一样,都是首先检查是否有outstan

Web&amp;amp;nbsp;in&amp;amp;nbsp;Linux小笔记001

Linux灾难恢复:   Root密码修复 Centos single   Filesystem是硬盘文件根目录,无法再cd ..就像macitosh 硬盘图标 Pwd:显示绝对路径 MBR修复 模拟MBR被破坏和修复   C语言死循环程序   #include int main(void) {  Int a;  While(1)  {printf("please input your number");  Scanf("%d",&a);  Printf(&

关于java性能的小笔记

  一.大规模高并发访问的性能分析: 1.应用服务器中JVM的优化: 在安装JDK后,有两个JVM虚拟机,分别是server jvm和 client jvm.其中server jvm比client jvm进行了更多的优化,所以在开发和测试Web应用系统时,应用指定服务器的jvm虚拟机为server jvm.        启动client jvm 和server jvm的方式:        Java –client yourclass        Java –server yourclass

DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 ._DB2

首先,是添加数据库实例: DB2的实例之间是相互独立的,实例可以被看作是数据库的容器.而默认DB2装好后会自己建一个名为DB2的实例.我们这里需要新建一个,命令这样敲: 在db2的命令行工具里面打开命令行,然后输入: 复制代码 代码如下: db2icrt INSTNAME 它这个实例名还挺恶心的,必须是小于8个字符的名字. 再用命令行创建好以后才能用那个控制中心的添加实例的功能来添加刚才创建的实例.其实这个添加只是把已有的实例添加到GUI的控制中心里,而不是创建实例....所以,必须注意的是,在

Web in Linux小笔记001

Linux灾难恢复:   Root密码修复 Centos single   Filesystem是硬盘文件根目录,无法再cd ..就像macitosh 硬盘图标 Pwd:显示绝对路径 MBR修复 模拟MBR被破坏和修复   C语言死循环程序   #include int main(void) {  Int a;  While(1)  {printf("please input your number");  Scanf("%d",&a);  Printf(&

Web in Linux小笔记001

Linux灾难恢复:   Root密码修复 Centos single   Filesystem是硬盘文件根目录,无法再cd ..就像macitosh 硬盘图标 Pwd:显示绝对路径 MBR修复 模拟MBR被破坏和修复   C语言死循环程序   #include int main(void) {  Int a;  While(1)  {printf("please input your number");  Scanf("%d",&a);  Printf(&

云计算服务小笔记

如果你不是很了解云计算服务,那么就请大家和我一起学习一下云计算服务.所谓"云",其实就是提供资源的网络."云"中的资源在使用者看来是可以无限扩展的,重要的是它可随时用来获取,按需使用,随时扩展,按使用付费.这种特性经常被称为IT基础设施. 广义的云计算可以是IT和软件.互联网相关的,也可以是任意其他的服务. 这里的"云"则是一些可以自我维护和管理的虚拟计算资源,通常为一些大型服务器集群,包括计算服务器.存储服务器.宽带资源等等.云计算将所有的计算