Boost Filesystem使用手册(官网翻译)

1.概念

pathname:路径名,比如:"/home/beman/boost/trunk/index.html";
filename:文件名,比如:index.html
stem:词干,比如index.html中的词干为index。
extension:文件扩展名,比如:index.html为html。

路径的格式:
通用格式(generic format):形如/my_directory/my_file.txt这样风格的路径名,它们被类POSIX操作系统使用,比如Unix系列、Linux、和Mac操作系统等。Windows也能识别通用格式,它是熟悉的国际URL格式的基础。目录分隔符是一个或多个斜杠符(slash character)’/’

本地格式(native format):是被特定操作系统自己定义的格式。对于Windows,斜杠‘/’和反斜杠(blackslash)’\'都可以被用作目录分隔符,比如/my_directory\my_file.txt ,当然,如果你要写成C++字符串形式,就为/my_directory\my_file.txt。
如果在Windows系统的路径名中出现驱动器说明符(a drive specifier)或
反斜杠
(a blackslash),则将其视为本地格式。

通用格式非常适合编写可移植的程序,这些程序可以在任何操作系统下工作!

2.使用

1)boost::filesystem::path

以下示例代码帮助学习类path的iterators, observers, composition, decomposition, and query functions。
在这里插入图片描述
在你的系统中运行示例代码,输入文件系统中真实存在的不同路径实参。以下是我们将详细谈论的调用(invocation)
在这里插入图片描述
在这里插入图片描述

知识点讲解:
1.通常的一个需求是由一系列的目录组合一个路径名。类path使用/和/=运算符添加元素。但是值得注意的是,这些操作是添加操作系统更偏好的目录分隔符。比如,类POSIX系统是斜杠’/’,而类Windows系统是反斜杠’\’。

2.路径名是一系列目录名和文件名元素的组合,为了能分解出各个元素,类class提供了类STL的迭代器的函数begin()和end()。

3.当操作系统内部交互或者和用户交互时,应该使用本地格式观察者(native format observers)。
当希望写出可移植代码时,通用格式观察者应该被使用(generic format observers)。

4.path对象总是以本地格式保存路径名,但在其它情况下,路径名保持原始格式。如果本地格式有多个形式,可以利用preferred()函数转化为操作系统更偏好的格式。比如Windows操作系统,它将斜杠转换为反斜杠。

5.需要注意一点,在Windows系统中,没有根文件名(比如drive specifier or network name),一个单独的slash(or backslash)是一个相对路径(relative path)。但是,在类POSIX系统中是绝对路径(absolute path)。

2)Boost.Filesystem中包含的状态查询函数(status query functions)

boost::filesystem命名空间下有exists, is_directory, 和is_regular_file(是否文件)三个函数。它们都返回bool值,形参都为path类对象。如果满足函数名所描述的条件,则返回true;否则,返回false,包括path实参不能被发现时。

3)目录迭代

Boost.Filesystem的directory_iterator类遵循标准库的istream_iterator的一般模式。它从path构造,遍历目录的内容。默认构造的directory_iterator充当结束迭代器
directory_iterator的值类型是directory_entry。一个directory_entry对象包含path和file_state信息。它不仅能被直接使用,而且也能在函数调用时传递给path实参。
在这里插入图片描述
另外一种目录迭代方式为:
在这里插入图片描述

将路径传递给命令行参数,下面是Linux和Windows的测试结果:
在这里插入图片描述
我们可以对其做一些改善:

  • 文件名(filename)比路径名(pathname)更易读。
  • Linux列表没有排序。那是因为directory_iteration的顺序不是固定的。其顺序性依赖于潜在的操作系统API和具体的文件系统。因此我们需要自己对文件系统排序。
    解决方案:
    使用sort算法可以对包含字符串的容器按照字典序排序
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值