c boost filesystemm 哪个库

21933人阅读
今天开始写作boost库指南系列文章了,我个人比较熟的就是这个filesystem库,当然要从这里先开始。这系列指南只是对初学的一个快速指南,没有深入学习,当然我个人水平也不敢说“深入”二字。
C++程序一直有一个方面不能做可移植性,尽管标准库有几个函数用于操作与文件系统相关的任务,但是这几个函数作用相对我们日常对文件系统操作的需求来说真是杯水车薪,所以对目录、路径、文件元信息的操作一直难以做可移植性。然而对于现在的程序来说,可移植性极端重要,谁也不保证他写程序不要某一天要移植更一个系统中去,可能这个系统现在大家还很少听说。
boost.filesystem为大家提供了一个选择。boost.filesystem以实现可移植的文件系统的操作为目标,通过精心设计一个中间概念来完成大多数可移植的文件系统的操作,这个中间层试图独立于所有的具体文件系统,然后把操作任务映射到这个中间层。当然这个中间层可能与现有的文件系统有最大的相似之处。本文不试图去讲述这个中间层,因为针对绝大部分情况,我们使用boost.filesystem不需要知道这个中间层。
下面我正式开始这个指南,这次好像扯得太远了。
这里我们讲述一些使用库的基础的准备的知识。
filesystem库提供了两个头文件,一个是&boost/filesystem.hpp&,这个头文件包含主要的库内容。它提供了对文件系统的重要操作。同时它定义了一个类path,正如大家所想的,这个是一个可移植的路径表示方法,它是filesystem库的基础。一个是&boost/filesystem/fstream.hpp&,是对std::fstream的一个补充,使用可以使用类boost::path作为参数,从而使得filesystem库与标准库的关系更亲密。由于文件系统对于大多数系统来说都是共享的,所以不同的进程可以同时操作同一个对象,因此filesysetm不提供这方面的特性保证。当然这种保证也是不可能的,或者至少昂贵的。filesystem在任何时候,只要不能完成相应的任务,它都可能抛出 basic_filesystem_error异常,当然并不是总会抛出异常,因为在库编译的时候可以关闭这个功能。同时有两个函数提供了无异常版本,这是因为在任务不能完成时并非是异常。filesystem库的所有内容定义在boost名字空间的一个下级名字空间里,它叫boost::filesytem。在使用boost.filesytem之后,链接时需要加“-lboost_filesystem-mt”选项,因为这个需要额外的链接,并非一个纯头文件的库。
获得单独文件属性
有了上面的准备知识,大家可以写一些简单的程序了。这篇文档主要作为一个入门的指南性的文档,所以会提供许多实例,或者说主要以实体来说明的boost.filesystem库的使用。
* =====================================================================================
filesystem.cpp
Description:
简单C++,boost filesystem 指南
日 17时16分32秒
gcc -Wall -Wextra filesystem.cpp -lboost_filesystem-mt
lgb (LiuGuangBao),
easy99.org
* =====================================================================================
#include&iostream&
#include&fstream&
#include&boost/filesystem.hpp&
int main()
namespace bf=boost:://简单别名
//filesystem中最基本的类型
bf::path path(&/tmp/test&);
//对当前的目录的操作
bf::path old_cpath=bf::current_path(); //取得当前目录
bf::path file_path = path / &file&; //path重载了 / 运算符
//判断文件存在性
if(bf::exists(path))
std::ofstream out(path.file_string().c_str());
if(!out) return 1;
out && &一个测试文件\n&;
std::cout && path && &不存在\n&;
//目录不存在,创建
bf::create_directory(path);
std::ofstream out(file_path.file_string().c_str());
if(!out) return 1;
out && &一个测试文件\n&;
bf::current_path(path); //设置当前为/home
if(bf::is_regular_file(path))
std::cout && path && &是普通文件\n&;
std::cout && path && &: 大小为& && bf::file_size(path) &&'\n';
bf::create_symlink(file_path, &/tmp/test/file-symlink&);
bf::current_path(old_cpath);
bf::remove(file_path);//删除文件file_path
bf::remove_all(path);//递归地删除
filesystem库使用经验
文件系统不具有许多特性与我们日常编写的程序不一样,标准库没有提供一个filesystem的原因就在于此,这个特殊性表现在:
文件系统是操作系统级别上的全局性,即文件系统中的操作可以在多个进程中异步进行,这可能引起许多问题,也就是说文件系统不是串行系统。文件系统具有很大的系统相关性,不同的操作系统提供了不同的文件系统,相同的操作系统也可以存在众多区别。这使得编写具有可移植的文件系统相关程序很困难,这需要足够多的小心与细致。不要使用绝对路径,因为绝对路径系统相关性太强了,所以不可能在中间层透明地完成;应该使用相对路径。boost::filesystem系统地定义了一个中间层,并且做到尽可能自由,但是有些问题是无法避免的。如UNIX系统存在符号链接的概念,而Windows中不存在,所以当你使用符号链接的时候就说明你不可能做到可移植性。
官方文档:
官方文档中译本:
一个英文指南:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:45776次
排名:千里之外
转载:12篇
(1)(1)(2)(4)(1)(3)(8)(1)博客访问: 1635076
博文数量: 327
博客积分: 1241
博客等级: 中尉
技术积分: 4437
注册时间:
给自己更高的要求,积极的学习,用正确的方法去做事,能辨别和听进别人的意见,然后付出最努力的辛苦。
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
最近把cpp代码从开发机放到编译机去,遇到了不少路径问题。
安装boost的时候,其实很简单
wget http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.tar.gz
tar -xzvf boost_1_54_0.tar.gz
cd boost_1_54_0
./bootstrap.sh --prefix=/usr/local
./b2 install --with=all
boost库被安装在/usr/local/lib下面
g++ syslogem.cpp -lboost_system
undefined reference to `boost::system::generic_category()'
&undefined reference to `boost::system::generic_category()'
undefined reference to `boost::system::system_category()'
只好添加路径
g++ syslogem.cpp -L/usr/local/lib -lboost_system
运行的时候
LD_LIBRARY_PATH=/usr/local/lib
error while loading shared libraries: libboost_system.so.1.54.0: cannot open shared object file: No such file or directory
只好手动链接
ln -s /usr/local/lib/libboost_system.so.1.54.0 /lib64
阅读(13754) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。boost库filesystem使用问题
发布时间: 6:48:54
编辑:www.fx114.net 我要评论
本篇文章主要介绍了"boost库filesystem使用问题",主要涉及到boost库filesystem使用问题方面的内容,对于boost库filesystem使用问题感兴趣的同学可以参考一下。
#include &boost/filesystem.hpp&#include &iostream&#include &string&#include &stdlib.h&int main(int argc, char* argv[]){& boost::filesystem::path my_path("/root/yijunjun.txt");& my_path.clear();& return 0;}makefile文件部分:filesystem:main.o&&& g++ -o $@ $& -lboost_filesystem-gcc42-mtmain.o:main.cpp&&& g++ -c $&clean:&&& rm -rf *.o&&& rm -rf filesystem编译出错提示:&error: ‘struct boost::filesystem::path’ has no member named ‘clear'其它函数没有这样的错误,这个错误有两点比较奇怪。第一:在其文档中明明的如此说明class basic_path: basic_path& operator/=(const basic_path& rhs);
basic_path& operator/=(const string_type& s);
basic_path& operator/=(const value_type* s);
template &class InputIterator&
basic_path& append(InputIterator first, InputIterator last);
void clear();
void swap( basic_path & rhs );
basic_path& remove_leaf();第二:明明typedef basic_path&std::string, path_traits&应该来说是一个类类型,怎么会提示struct呢?特此记下。
版权声明:本文为博主原创文章,未经博主允许不得转载。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:Boost&库文件系统使用
库文件系统使用
编译filesystem& (文件系统)&&&&&
--with-filesystem --disable-filesystem2 variant=debug
link=static
boost文件系统分类有:
属性函数:提供杂项信息,如文件大小、磁盘使用量等。
文件系统操作函数:用于创建常规文件、目录和符号链接;复制和重命名文件;提供删除功能。
实用工具:测试文件的扩展名等。
杂项常规函数:以编程方式更改文件扩展名等。
"stdafx.h"
&iostream&
//定义版本
BOOST_FILESYSTEM_VERSION 3
&boost/filesystem.hpp&
&boost/filesystem/fstream.hpp&
lib(lib,"libboost_filesystem-vc80-mt-gd-1_46_1.lib");
lib(lib,"libboost_filesystem-vc80-mt-gd.lib");
namespace boost::
_tmain(int argc, _TCHAR* argv[])
//显示文件大小&
boost::filesystem::path filepath="foo";
std::cout&&boost::filesystem::file_size(filepath)&&"B"&&std::
//枚举文件目录层次
boost::filesystem::path
pathdirectory("/usr/local/include/fans");
boost::filesystem::path::iterator
pathdirectoryiter=pathdirectory.begin();
while(pathdirectoryiter!=pathdirectory.end()){
&&&&&&&&&&&&&&&&&&
std::cout&&*pathdirectoryiter&&std::
&&&&&&&&&&&&&&&&&&
//异常处理
&&&&&&&&&&&&&&&&&&
boost::filesystem::path pathone("c:\\src");
&&&&&&&&&&&&&&&&&&
boost::filesystem::path pathtwo("c:\\crs");
&&&&&&&&&&&&&&&&&&
boost::filesystem::rename(pathone ,pathtwo );
}catch(boost::filesystem::filesystem_error e) {
&&&&&&&&&&&&&&&&&&
int fdsa=0;
&&&&&&&&&&&&&&&&&&
//异常处理
//获取文件信息&
这里是磁盘
&boost::filesystem::space_info&
&filespaceinfo=boost::filesystem::space("c:");
&std::cout&&"可用"&&filespaceinfo.available/(24)&&"GB"&&std::
&std::cout&&"总容量"&&filespaceinfo.capacity/(24)&&"GB"&&std::
&std::cout&&"剩余"&&filespaceinfo.free/(24)&&"GB"&&std::
system("PAUSE");
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 c boost filesystem 的文章

 

随机推荐