【C++】POCO学习总结(十一):文件系统(路径、文件属性、目录浏览、临时文件等)

本文主要是介绍【C++】POCO学习总结(十一):文件系统(路径、文件属性、目录浏览、临时文件等),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【C++】郭老二博文之:C++目录

1、路径

1.1 路径说明

Window:
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:

Linux:
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:Foundation.h
File Version:

1.2 Poco::Path 表示路径

头文件:#include “Poco/Path.h”
Poco::Path并不关心它所包含的路径是否在文件系统中实际存在

1.3 组成路径的示例

#include "Poco/Path.h"
int main(int argc, char** argv)
{Poco::Path p(true); // path will be absolutep.setNode("VMS001");p.setDevice("DSK001");p.pushDirectory("POCO");p.pushDirectory("INCLUDE");p.pushDirectory("POCO");p.setFileName("POCO.H");std::string s(p.toString(Poco::Path::PATH_VMS));// "VMS001::DSK001:[POCO.INCLUDE.POCO]POCO.H"p.clear(); // start over with a clean statep.pushDirectory("projects");p.pushDirectory("poco");s = p.toString(Poco::Path::PATH_WINDOWS); // "projects\poco\"s = p.toString(Poco::Path::PATH_UNIX); // "projects/poco/"s = p.toString(); // depends on your platformreturn 0;
}

1.4 解析路径的示例

#include "Poco/Path.h"
using Poco::Path;
int main(int argc, char** argv)
{Path p("c:\\projects\\poco\\build_vs80.cmd", Path::PATH_WINDOWS);std::string device(p.getDevice()); // "c"int n = p.depth(); // 2std::string dir1(p.directory(0)); // "projects"std::string dir2(p[1]); // "poco"std::string fileName(p[2]); // "build_vs80.cmd"fileName = p.getFileName();std::string baseName(p.getBaseName()); // "build_vs80"std::string extension(p.getExtension()); // "cmd"p.setBaseName("build_vs71");fileName = p.getFileName(); // "build_vs71.cmd"return 0;
}

1.5 常用静态函数

Poco::Path提供静态方法来获取系统特定的特殊目录或文件的路径:

  • std::string current()返回当前工作目录的路径
  • std::string home()返回用户主目录的路径
  • std::string temp()返回临时文件到系统目录的路径
  • std::string null()返回系统空文件/设备的路径(例如,“/dev/null"或"NUL:”)
  • bool find(const std::string& pathList, const std::string& name, path & path)
    在pathList中指定的位置搜索具有给定名称的文件。
    pathList中的路径必须由平台的路径分隔符分隔(Windows上为“;”,Unix上为“:”)。
    如果在pathList中给出的位置之一找到文件,则文件的绝对路径存储在path中,并返回true。
    否则,返回false, path保持不变。

2、Poco::File 文件

头文件:#include “Poco/File.h”

2.1 查询文件属性

  • bool exists() const:如果文件存在返回true,否则返回false
  • bool canRead() const:如果文件是可读的(用户有足够的权限从文件中读取)返回true,否则返回false
  • bool canWrite() const:如果文件是可写的(用户有足够的权限写入文件)返回true,否则返回false
  • bool canExecute() const:如果文件是可执行的返回true,否则返回false
  • bool isFile() const:如果文件是普通文件(而不是目录或符号链接)则返回true,否则返回false
  • bool isLink() const:如果文件是符号链接返回true,否则返回false
  • bool isDirectory() const:如果文件是目录返回true,否则返回false
  • bool isDevice() const:如果文件是设备文件返回true,否则返回false
  • bool isHidden() const:如果文件具有隐藏属性(Windows),或者其名称以开头(Unix),返回true
  • Poco::Timestamp created() const:返回文件创建的日期和时间
  • Poco::Timestamp getLastModified() const:返回文件被访问的日期和时间
  • File::FileSize getSize() const:以字节为单位返回文件的大小,File::FileSize是一个无符号64位整数。

2.2 修改文件属性

  • void setLastModified(Poco::Timestamp dateTime):设置文件的访问时间戳
  • void setSize(FileSize newSize):以字节为单位设置文件的大小,例如截断文件
  • void setWritable(bool flag = true):使文件可写(flag = true),或只读(flag = false)
  • void setReadOnly(bool flag = true):与setWritable(!flag)相同

2.3 重命名、复制、删除、创建

  • void copyTo(const std::string& path) const :文件复制到给定的路径(可以是目录)
  • void moveTo(const std::string& path) const:将文件复制到给定的路径(可以是一个目录),然后删除原始文件
  • void renameTo(const std::string& path):重命名文件
  • void remove(bool recursive = false):删除文件。如果文件是一个目录且recursive = true,则递归删除该目录下的所有文件和子目录。
  • bool createFile():在原子操作中创建一个新的空文件。如果文件已经创建,则返回true;如果文件已经存在,则返回false。如果创建失败,抛出Poco::FileException。
  • bool createDirectory():如果创建成功,则返回true;如果目录已经存在,则返回false。如果创建失败(例如,如果父目录不存在),则抛出一个异常Poco::FileException。
  • void createDirectories():创建一个目录,以及所有需要的父目录

2.4 读目录中的文件

void list(std::vectorstd::string& files) const
void list(std::vector& files) const

3、Poco::DirectoryIterator 目录迭代器

Poco::DirectoryIterator提供一个迭代器风格的接口,用于读取目录的内容。
头文件:#include “Poco/DirectoryIterator.h”
Poco::DirectoryIterator中维护一个Poco::File和一个绝对路径Poco::Path。

#include "Poco/DirectoryIterator.h"
#include <iostream>
using Poco::DirectoryIterator;
using Poco::Path;
int main(int argc, char** argv)
{std::string cwd(Path::current());DirectoryIterator it(cwd);DirectoryIterator end;while (it != end){std::cout << it.name();if (it->isFile())std::cout << it->getSize();std::cout << std::endl;Path p(it.path());++it;}return 0;
}

4、模式匹配

Poco::Glob,在模式中:

  • '*'匹配任何字符序列
  • '?'匹配任意单个字符
  • [SET]匹配指定集合中的任意单个字符
  • [!SET]匹配不属于指定字符集的任何单个字符
  • [123]匹配数字1、2或3
  • [a-zA-Z]匹配任何小写或大写字母
  • 特殊字符可以用反斜杠转义。

bool match(const std::string& subject):如果subject中的路径与Glob的模式匹配,则返回true,否则返回false。

#include <iostream>
using Poco::Glob;
int main(int argc, char** argv)
{std::set<std::string> files;Glob::glob("%WINDIR%\\system32\\*.exe", files);// Glob::glob("/usr/include/*/*.h", files);std::set<std::string>::iterator it = files.begin();for (; it != files.end(); ++it){std::cout << *it << std::endl;}return 0;
}

5、Poco::TemporaryFile 临时文件

5.1 说明

许多程序需要临时文件,其特征如下:

  • 在一个特殊的系统特定目录(例如,Unix系统上的"/tmp/")中创建一个临时文件。
  • 临时文件具有自动生成的唯一名称
  • 当临时文件不再使用时,必须删除临时文件

Poco::TemporaryFile派生自Poco::File。构造函数自动创建一个唯一的文件名,放在系统特定的临时文件目录中。文件本身没有被创建。如果文件已经创建,析构函数将删除该文件。或者,删除可以推迟到程序终止,或者不删除。

5.2 使用

  • void keep():禁止析构函数自动删除文件
  • void keepUntilExit():禁用析构函数自动删除文件,并在程序终止时注册该文件以进行删除
  • static void registerForDeletion(const std::string& path):注册一个文件以便在程序终止时自动删除
  • static std::string tempName()为临时文件创建一个唯一的路径名

这篇关于【C++】POCO学习总结(十一):文件系统(路径、文件属性、目录浏览、临时文件等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483914

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

C++的模板(八):子系统

平常所见的大部分模板代码,模板所传的参数类型,到了模板里面,或实例化为对象,或嵌入模板内部结构中,或在模板内又派生了子类。不管怎样,最终他们在模板内,直接或间接,都实例化成对象了。 但这不是唯一的用法。试想一下。如果在模板内限制调用参数类型的构造函数会发生什么?参数类的对象在模板内无法构造。他们只能从模板的成员函数传入。模板不保存这些对象或者只保存他们的指针。因为构造函数被分离,这些指针在模板外

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

随想录 Day 69 并查集 107. 寻找存在的路径

随想录 Day 69 并查集 107. 寻找存在的路径 理论基础 int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好vector<int> father = vector<int> (n, 0); // C++里的一种数组结构// 并查集初始化void init() {for (int i = 0; i < n; ++i) {father[i] = i;}

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J