Boost中文件系统类FileSystem全面解析

来源:互联网 发布:shell编程入门书籍推荐 编辑:程序博客网 时间:2024/05/20 06:50

Boost中文件系统类FileSystem全面解析

程序开发者难免会遇见对文件进行操作,例如,定义文件路径,判断文件是否存在等。原生的CPP对文件操作功能支持的较弱,因此CPP标准委员会开发的Boost库中提供的强大的操作文件库--FileSystem。本文将对FileSystem类进行全面解析,最后通过实例讲解常用的功能。

1、 path类

path类是FileSystem中的基础类,提供的文件路径的存储功能,其构造函数可以接受C类型的字符串,也可以接受string类型的字符串。path采用标准的POSIX语法表示可移植的文件路径表示,即采用斜杠'/'分割文件路径,这也是UNIX和LINUX的常用表示方式。windows采用反斜杠'\'表示文件路径之间的分割。

例如:

        //定义文件路径
boost::filesystem::path readPath ("./cmwqq2008/cmw.txt");


//定义目录
boost::filesystem::path readDir ("./cmwqq2008/");

1.1 path类提供的函数

     empty()函数用于判断path类的路径字符串是否为空

     operator/=,path类重载了operator/=操作符,可以向普通路径一样,采用斜杠(/)实现路径之间的追加。

     例如:追加目录,也可以追加文件

     //定义目录
boost::filesystem::path readDir ("./cmwqq2008/");

readDir/= "China";

     执行后,readDir = "./cmwqq2008/China";

(a) string(),返回标准格式的路径表示;

(b) parent_path(),返回路径中的父路径;

(c)stem() 不含有扩展名的全路径;

(d) extension() 扩展名;

(e) filename() 文件名;

(f) root_name() 返回根的名字;

(g)root_directory()返回根目录;

(h) root_path()返回根路径;

(i)relative_path()返回相对路径;

(j) has_filename()判断是否具有文件名;

(k) has_parent_path() 判断是否具有父路径;

//程序如下所示

#include <iostream>
#include <cstdlib>


using namespace std;


#include <boost/filesystem.hpp>
using namespace boost;
using namespace boost::filesystem;

int main(int argc, char **argv)
{
//定义文件路径
boost::filesystem::path readPath ("d:/cmwqq2008/cvpr/cmw.txt");

//定义目录
boost::filesystem::path readDir ("./cmwqq2008/");

readDir/= "China";

//判断轮径是否为空
bool flag = readPath.empty();
std::cout<<"flag="<<flag<<std::endl;

//返回标准路径名称
std::string stdName = readPath.string();
std::cout<<"stdName="<<stdName<<std::endl;

//不含扩展名的文件名称。
boost::filesystem::path stemStr = readPath.stem();
std::cout<<"stemStr="<<stemStr<<std::endl;

//返回文件扩展名
boost::filesystem::path extName = readPath.extension();
std::cout<<"extName="<<extName<<std::endl;

//返回文件名称
boost::filesystem::path fileName = readPath.filename();
std::cout<<"filename="<<fileName<<std::endl;

//返回父路径
boost::filesystem::path parentPath = readPath.parent_path();
std::cout<<"parentPath="<<parentPath<<std::endl;

//返回根的名字
boost::filesystem::path rootName = readPath.root_name();
std::cout<<"rootName="<<rootName<<std::endl;

//返回根目录
boost::filesystem::path rootDir = readPath.root_directory();
std::cout<<"rootDir="<<rootDir<<std::endl;

//返回根路径
boost::filesystem::path rootPath = readPath.root_path();
std::cout<<"rootPath="<<rootPath<<std::endl;


//返回相对路径,=删除root_path()
boost::filesystem::path relativePath = readPath.relative_path();
std::cout<<"relativePath="<<relativePath<<std::endl;

//判断是否具有文件名称
bool hasFileName = readPath.has_filename();
std::cout<<"hasFileName="<<hasFileName<<std::endl;

//判断是否具有父路径
bool hasParentPath = readPath.has_parent_path();
std::cout<<"hasParentPath="<<hasParentPath<<std::endl;


return EXIT_SUCCESS;
}

//程序运行结果如下所示:


1.2 path提供的函数,改变path自身

(a) remove_filename() 删除路径中最后的文件名称,将path变成纯路径;

(b) replace_extension() 取代文件的扩展名






今天就写到这里,明天继续!吐舌头










0 0
原创粉丝点击