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

6. 删除remove 递归删除remove_all

7. 改名字rename

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

下面上自己的代码(备忘):

#include <iostream>
#include <vector>
#include <boost/filesystem.hpp>
#include <boost/filesystem/operations.hpp>
using namespace std;
namespace fs = boost::filesystem ;

void getallfilename( string pathname , vector<string>& savename )
{
	fs::path fullpath(pathname) ;

	//判断目录是否存在
	if( !fs::exists(fullpath) ) {

		cout << "No thus path " << endl ;
		return ;
	}
	//判断是否是目录
	if( !fs::is_directory(fullpath) ) {

		cout << "Is not a direcotry " << endl ;
		return ;
	}

	// 利用fs::directory_iterator遍历path的内容
	//end_iter默认指向path的末尾
	fs::directory_iterator end_iter ;

	for( fs::directory_iterator file_iter( fullpath ) ; file_iter != end_iter ; ++file_iter ) {

		//判断结尾是否为".json"
		if( fs::extension(*file_iter) == ".json" ) {
			//将fs::path;类型转换成string类型
			savename.push_back( fs::system_complete(*file_iter).leaf().string() ) ;
		}

	}
}

int main()
{
	string path( "/usr/Resources/scene" ) ;
	vector<string> savename ;
	//获取指定目录下的所有json文件名,存入savename中
	getallfilename( path , savename ) ;
	vector<string>::iterator it = savename.begin() ;
	for( ; it != savename.end() ; ++it ) {

		cout << *it << endl ;
	}
	return 0;
}

注:

编译boost::filesystem库时会报错,因为先编译boost_system ,然后编译boost_filesystem ,所以编译时可以在编译器项目设置里面的Linker options中添加如下选项:

-lboost_system -lboost_filesystem

boost::filesystem库使用入门

时间: 2024-11-04 12:07:03

boost::filesystem库使用入门的相关文章

boost::filesystem常用用法详解

提示: filesystem库提供了两个头文件,一个是<boost/filesystem.hpp>,这个头文件包含主要的库内容.它提供了对文件系统的重要操作.同时它定义了一个类path,正如大家所想的,这个是一个可移植的路径表示方法,它是filesystem库的基础. 一个是<boost/filesystem/fstream.hpp>,是对std::fstream的一个补充,使用可以使用类boost::path作为参数,从而使得filesystem库与标准库的关系更亲密. 由于文件

Boost::filesystem 使用小笔记

今天拿起手要用C++写个小工具,从指定的目录递归遍历文件,然后做一下处理.又翻了一下boost的filesystem库.小结一下,希望能加深印象,免得下次又要查看文档. 1. path对象就是一个跨平台的路径对象.有许多方法访问路径的各个部分,也用它的iterator迭代路径中的各个部分:      path构造目录结构的时候使用“/”运算符,非常直观.      比如path p1;      path p2 = p1/"something"; p1 /= "xxx.xxx

boost::filesystem经常使用使用方法具体解释

提示: filesystem库提供了两个头文件,一个是<boost/filesystem.hpp>,这个头文件包括基本的库内容.它提供了对文件系统的重要操作. 同一时候它定义了一个类path.正如大家所想的.这个是一个可移植的路径表示方法,它是filesystem库的基础. 一个是<boost/filesystem/fstream.hpp>.是对std::fstream的一个补充,使用能够使用类boost::path作为參数.从而使得filesystem库与标准库的关系更亲热. 由

为 cmake 添加 boost 编译库

boost 具有很好的平台独立性, 因此会作为首选的 api 来完成特定的功能. 我在项目中使用了 boost 的 filesystem 功能来获取程序的运行目录. #include <boost/filesystem/path.hpp> #include <boost/filesystem/operations.hpp> int main() { ... std::string exePath = boost::filesystem::initial_path<boost:

Boost::thread库的使用

阅读对象 本文假设读者有几下Skills [1]在C++中至少使用过一种多线程开发库,有Mutex和Lock的概念. [2]熟悉C++开发,在开发工具中,能够编译.设置boost::thread库. 环境 [1]Visual Studio 2005/2008 with SP1 [2]boost1.39/1.40 概要 通过实例介绍boost thread的使用方式,本文主要由线程启动.Interruption机制.线程同步.等待线程退出.Thread Group几个部份组成. 正文 线程启动 线

thrift 编译调用boost动态库

In the project properties you must also set HAVE_CONFIG_H as force include the config header: "windows/confg.h" By default lib/cpp/windows/force_inc.h defines: #define BOOST_ALL_NO_LIB 1 #define BOOST_THREAD_NO_LIB 1 This has for effect to have

Boost C++库介绍

今天Mayuyu将来讲述一个非常实用的C++库,它叫做Boost C++库.Boost库中加入了一些在实战中非常常用的函数对C++标准进行了扩充,在实际开发中非常有用. Boost C++的安装包可以在这里下载:http://www.boost.org/ 解压后进入目录执行:sh bootstrap.sh. 完成后得到了b2可执行文件,继续执行./b2,最后执行./bjam完成安装. 在Boost C++库中,有智能指针,函数对象,词法分析器,多线程,数据结构等等.具体用法可以参照下面 链接:h

boost asio库 同步socket连接示例

<pre name="code" class="cpp">/////////////////////////////////////// // Asio同步socket连接示例 // #include <iostream> #include <boost/thread.hpp> #include <boost/asio/io_service.hpp> #include <boost/asio.hpp> us

boost 线程库

http://www.boost.org/Boost的安装step1.从www.boost.org下载boost库 step2 在 tools\build\jam_src目录下 运行build.bat来生成jamstep3 设置环境变量(后面的%PATH%要加) PATH=%boost的绝对路径%\tools\build\jam_src\bin.ntx86;%PATH% PATH=%boost的绝对路径%;%PATH% For Visial Studio 6.0SET MSVC_ROOT="VC