Poco学习随笔——Path类

POCO库的一些学习、整理和总结:

POCO库的文件操作主要是2个类:Path和File。

PS:不同操作系统中数据代表的数据不同,POCO目前支持Windows、UNIX相关系统和OpenVMS。我只关心UNIX和Windows,还有很多函数一看就知道意思,在这里就不多做解释了。

#include <Poco/Path>

#include <Poco/File>

一、 Path由以下几点组成:

1. node name

 

UNIX下,此字段没有意义;

2. device name

windows 驱动盘符,比如C盘等;

UNIX下,无意义;

3. directory list

4. file name

5. style

操作系统类型

6. Kind

absolute或者relative, file或者directory;

二、 路径的表示

1. absolute path(绝对路径)

2. relative path(相对路径)

注:2种路径方式可以互相转换。

三、 例子

---------------------------

Path: C:\Windows\system32\cmd.exe
Style: Windows
Kind: absolute, to file
Node Name: –
Device Name: C
Directory List: Windows, system32
File Name: cmd.exe
File Version: –

--------------------------

Path: \\www\site\index.html
Style: Windows
Kind: absolute, to file
Node Name: www
Device Name: –
Directory List: site
File Name: index.html
File Version: –

--------------------------

Path: /usr/local/include/Poco/Foundation.h
Style: Unix
Kind: absolute, to file
Node Name: –
Device Name: –
Directory List: usr, local, include, Poco
File Name: index.html
File Version: –

四、 Path的构造

1. 一点点的给Path的实例添加设置值;

带一个Bool的参数:true=absolute, false = relative;

之后:

void setNode(const std::string& node)
void setDevice(const std::string& device)
void pushDirectory(const std::string& name)
void setFileName(const std::string& name)

2. 实例化的时候制定路径和系统类型:

> PATH_UNIX
> PATH_WINDOWS
> PATH_VMS
> PATH_NATIVE当前系统
> PATH_GUESSPOCO自动匹配

Path(const std::string& path);
Path(const std::string& path, Style style);

Path(const Path& parent, const std::string& fileName);
Path(const Path& parent, const Path& relative);

五、 路径的转换

Path& assign(const std::string& path);
Path& parse(const std::string& path);
Path& assign(const std::string& path, Style style);
Path& parse(const std::string& path, Style style);

bool tryParse(const std::string& path);
bool tryParse(const std::string& path, Style style);

六、 get方法

std::string toString();
std::string toString(Style style);

const std::string& getNode();
const std::string& getDevice();
const std::string& directory(int n) (also operator []);// 返回第n层次的目录 从0开始计算


const std::string& getFileName();

int depth() const; // 目录深度

std::string getBaseName() const // 基本文件名,不包括扩展名,不如cmd.exe, 就是“cmd”
void setBaseName(const std::string& baseName)
std::string getExtension() const // 扩展文件名,不包括基本文件名,不如cmd.exe, 就是“exe”
void setExtension(const std::string& extension)

例子:

 1 #include "Poco/Path.h"
 2 using Poco::Path;
 3 int main(int argc, char** argv)
 4 {
 5     Path p("c:\\projects\\poco\\build_vs80.cmd",          Path::PATH_WINDOWS);
 6     std::string device(p.getDevice()); // "c"
 7     int n = p.depth(); // 2
 8     std::string dir1(p.directory(0)); // "projects"
 9     std::string dir2(p[1]); // "poco"
10     std::string fileName(p[2]); // "build_vs80.cmd"
11     fileName = p.getFileName();
12     std::string baseName(p.getBaseName()); // "build_vs80"
13     std::string extension(p.getExtension()); // "cmd"
14     p.setBaseName("build_vs71");
15     fileName = p.getFileName(); // "build_vs71.cmd"
16     return 0;
17 }

七、 操作

Path& makeDirectory();// 修改最后一个目录名称

Path& makeFile(); // 修改文件名称;

Path& makeParent(); // 修改前级的路径
Path parent() const; // 获取前级的路径

Path& makeAbsolute(); // 把相对路径转换成绝对路径
Path& makeAbsolute(const Path& base);
Path absolute() const;
Path absolute(const Path& base);

Path& append(const Path& path); // 追加另一个路径

Path& resolve(const Path& path); // 如果path是绝对路径则替换,否则是append

bool isAbsolute() const; // 绝对路径为true

bool isRelative() const; // 相对路径为true

bool isDirectory() const; // 目录

bool isFile() const; // 文件

八、 静态方法

std::string current(); // 返回当前路径

std::string home(); // 返回程序的home路径

std::string temp(); // 返回临时文件路径

std::string null(); // /dev/null

std::string expand(const std::string& path); // 解析环境变量,跟系统有关windows %VAR%,UNIX $VAR

void listRoots(std::vector<std::string>& roots); // 包括跟级别的目录,windows磁盘驱动器名称,UNIX包括“/”

bool find(const std::string& pathList, const std::string& name, Path& path) // 查找pathList路径(windows用“;”,UNIX用“:”分割)中是否有name文件存在,如果有返回true,path被填充,如果没有返回false,path没有值

 

 

posted @ 2013-03-13 12:01  zxx_0727  阅读(2926)  评论(0编辑  收藏  举报