freecplus框架-目录操作
文章目录
- 一、源代码说明
- 二、创建目录
- 三、获取目录下的文件信息
- 四、获取视频教程
- 五、版权声明
一、源代码说明
freecplus是一个Linux系统下的C/C++开源框架,源代码请前往C语言技术网(www.freecplus.net)下载。
本文介绍的是freecplus框架的目录操作函数和类。
函数和类的声明文件是freecplus/_freecplus.h。
函数和类的定义文件是freecplus/_freecplus.cpp。
示例程序位于freecplus/demo目录中。
编译规则文件是freecplus/demo/makefile。
二、创建目录
在Linux下,如果想创建一个"/tmp/aaa/bbb/ccc/ddd/data.xml"的文件,必须先创建"/tmp/aaa/bbb/ccc/ddd",步骤如下:
1)如果"/tmp"目录不存在,创建"/tmp"。
2)如果"/tmp/aaa"目录不存在,创建"/tmp/aaa"。
3)如果"/tmp/aaa/bbb"目录不存在,创建"/tmp/aaa/bbb"。
4)如果"/tmp/aaa/bbb/ccc"目录不存在,创建"/tmp/aaa/bbb/ccc"。
5)如果"/tmp/aaa/bbb/ccc/ddd"目录不存在,创建"/tmp/aaa/bbb/ccc/ddd"。
6)创建"/tmp/aaa/bbb/ccc/ddd/data.xml"文件。
这些操作虽然没有多少技术含量,但也很烦人。
MKDIR函数根据绝对路径的文件名或目录名逐级的创建目录。
函数声明:
bool MKDIR(const char *pathorfilename,bool bisfilename=true);
参数说明:
pathorfilename:绝对路径的文件名或目录名。
bisfilename:说明pathorfilename的类型,true-pathorfilename是文件名,否则是目录名,缺省值为true。
返回值:true-创建成功,false-创建失败,如果返回失败,原因有大概有三种情况:1)权限不足;2)pathorfilename参数不是合法的文件名或目录名;3)磁盘空间不足。
示例(demo30.cpp)
/** 程序名:demo30.cpp,此程序演示freecplus框架中采用MKDIR函数根据绝对路径的文件名或目录名逐级的创建目录。* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include "../_freecplus.h"int main()
{MKDIR("/tmp/aaa/bbb/ccc/ddd",false); // 创建"/tmp/aaa/bbb/ccc/ddd"目录。MKDIR("/tmp/111/222/333/444/data.xml",true); // 创建"/tmp/111/222/333/444"目录。
}
三、获取目录下的文件信息
freecplus框架把获取某目录及其子目录中的文件列表信息的功能封装成CDir类。
类的声明:
// 获取某目录及其子目录中的文件列表信息。
class CDir
{public:char m_DirName[301]; // 目录名,例如:/tmp/root。char m_FileName[301]; // 文件名,不包括目录名,例如:data.xml。char m_FullFileName[301]; // 文件全名,包括目录名,例如:/tmp/root/data.xml。int m_FileSize; // 文件的大小,单位:字节。char m_ModifyTime[21]; // 文件最后一次被修改的时间,即stat结构体的st_mtime成员。char m_CreateTime[21]; // 文件生成的时间,即stat结构体的st_ctime成员。char m_AccessTime[21]; // 文件最后一次被访问的时间,即stat结构体的st_atime成员。char m_DateFMT[21]; // 文件时间显示格式,由SetDateFMT方法设置。vector<string> m_vFileName; // 存放OpenDir方法获取到的文件名(文件全名,包括目录名)列表。int m_pos; // 已读取m_vFileName容器的位置,每调用一次ReadDir方法m_pos加1。CDir(); // 构造函数。void initdata(); // 初始化成员变量。// 设置文件时间的格式,支持"yyyy-mm-dd hh24:mi:ss"和"yyyymmddhh24miss"两种,缺省是前者。void SetDateFMT(const char *in_DateFMT);// 打开目录,获取目录中的文件列表信息,存放于m_vFileName容器中。// in_DirName,待打开的目录名,采用绝对路径,如/tmp/root。// in_MatchStr,待获取文件名的匹配规则,不匹配的文件被忽略。// in_MaxCount,获取文件的最大数量,缺省值为10000个。// bAndChild,是否打开各级子目录,缺省值为false-不打开子目录。// bSort,是否对获取到的文件列表(即m_vFileName容器中的内容)进行排序,缺省值为false-不排序。// 返回值:如果in_DirName参数指定的目录不存在,OpenDir方法会创建该目录,如果创建失败,返回false,还有,如果当前用户对in_DirName目录下的子目录没有读取权限也会返回false,其它正常情况下都会返回true。bool OpenDir(const char *in_DirName,const char *in_MatchStr,const unsigned int in_MaxCount=10000,const bool bAndChild=false,bool bSort=false);// 这是一个递归函数,用于OpenDir()的调用,在CDir类的外部不需要调用它。bool _OpenDir(const char *in_DirName,const char *in_MatchStr,const unsigned int in_MaxCount,const bool bAndChild);// 从m_vFileName容器中获取一条记录(文件名),同时得到该文件的大小、修改时间等信息。// 调用OpenDir方法时,m_vFileName容器被清空,m_pos归零,每调用一次ReadDir方法m_pos加1。// 当m_pos小于m_vFileName.size(),返回true,否则返回false。bool ReadDir();~CDir(); // 析构函数。
};
CDir类的成员变量和函数的说明文字在类的声明中已详细描述。
我们通过一个应用场景来演示CDir类的用法。
先执行以下脚本生成测试目录和文件。
mkdir /tmp/root
mkdir /tmp/root/aaa
mkdir /tmp/root/bbb
cd freecplus
cp freecplus.* /tmp/root/.
cp demo/demo1* /tmp/root/aaa/.
cp demo/demo2* /tmp/root/bbb/.
cp demo/makefile /tmp/root/bbb/.
执行以上脚本后,在/tmp/root目录中的目录和文件列表如下:
示例(demo32.cpp)
/** 程序名:demo32.cpp,此程序演示freecplus框架中采用CDir类获取某目录及其子目录中的文件列表信息。* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include "../_freecplus.h"int main()
{CDir Dir;if (Dir.OpenDir("/tmp/root","*.h,*cpp",100,true,true)==false){printf("Dir.OpenDir(/tmp/root) failed.\n"); return -1;}while(Dir.ReadDir()==true){printf("filename=%s,mtime=%s,size=%d\n",Dir.m_FullFileName,Dir.m_ModifyTime,Dir.m_FileSize);}
}
运行效果
注意事项:
1)每次调用ReadDir方法后,把CDir类其它成员变量的值输出到屏幕,观察运行效果。
2)OpenDir方法的in_MatchStr参数非常重要,在实际开发中应用广泛。
3)如果文件名圆点"."打头,OpenDir方法将不读取这些文件,如果您希望读取这些文件,可以修改_OpenDir方法中的源代码。
4)OpendDir方法的in_MaxCount参数设置了每次扫描目录中的文件数量,建议不超过10000,如果取值过大,打开目录的时间会比较长,还会消耗比较多的内存。
5)OpenDir的bSort参数设置是否对m_vFileName容器进行排序,排序会消耗资源和时间,可以不排序就不排序。
四、获取视频教程
百万年薪程序员录制,《C/C++高性能服务开发基础》视频教程已在CSDN学院发布,优惠价12元,地址如下:
https://edu.csdn.net/course/play/29402
五、版权声明
C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道
如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!
freecplus框架-目录操作相关推荐
- freecplus框架-文件操作
文章目录 一.源代码说明 二.文件操作函数 1.删除文件 2.文件重命名 3.复制文件 4.获取文件的大小 5.获取文件的时间 6.重置文件的时间 7.示例程序 三.文件读取函数 1.打开文件 2.读 ...
- freecplus框架-字符串操作
文章目录 一.源代码说明 二.字符串复制 1.STRCPY函数 2.STRNCPY函数 三.字符串拼接 1.STRCAT函数 2.STRNCAT函数 四.格式化输出到字符串 1.SPRINTF函数 2 ...
- freecplus框架-PostgreSQL数据库操作
文章目录 一.源代码说明 二.概述 三.connection类 四.sqlstatement类 五.程序流程 1.无结果集SQL的程序的流程 2.有结果集SQL的程序的流程 六.示例程序 1.创建超女 ...
- freecplus框架-MySQL数据库操作
文章目录 一.源代码说明 二.概述 三.connection类 四.sqlstatement类 五.程序流程 1.无结果集SQL的程序的流程 2.有结果集SQL的程序的流程 六.示例程序 1.创建超女 ...
- freecplus框架-Oracle数据库操作
文章目录 一.源代码说明 二.概述 三.connection类 四.sqlstatement类 五.程序流程 1.无结果集SQL的程序的流程 2.有结果集SQL的程序的流程 六.示例程序 1.创建超女 ...
- freecplus框架-日志文件操作
文章目录 一.源代码说明 二.日志文件的意义 三.CLogFile类 1.类的声明 2.示例程序 3.日志文件的切换 四.获取视频教程 五.版权声明 一.源代码说明 freecplus是一个Linux ...
- 11.freecplus框架-Oracle数据库操作
文章目录 一.源代码说明 二.概述 三.connection类 四.sqlstatement类 五.程序流程 1.无结果集SQL的程序的流程 2.有结果集SQL的程序的流程 六.示例程序 1.创建超女 ...
- freecplus框架简介
文章目录 一.freecplus框架简介 二.freecplus开源许可协议 三.freecplus框架内容 字符串操作 2.xml解析 3.日期时间 4.目录操作 5.文件操作 6.日志文件 7.参 ...
- freecplus框架-ftp客户端
文章目录 一.源代码说明 二.概述 三.Cftp类 四.准备测试环境 1.创建Linux操作系统用户 2.安装配置ftp服务器 3.配置防火墙 4.准备测试的文件 五.示例程序 1.获取服务器文件列表 ...
最新文章
- bootstrap:按钮,下拉菜单
- 启用CORS实现Ajax跨域请求
- C++_泛型编程与标准库(六)
- SpringBoot+Mybatis 框架之 @Select注解方式搭建
- TCP/IP 笔记 - TCP连接管理
- 远程访问及控制(详解)——SSH远程管理及TCP Wrappers 访问控制
- Dapr 助力应用架构的可持续性
- 西交计算机专业912一样吗,西安交大912(总分404 专业课133分)经验总结
- Elasticsearch Curator使用
- linux软件包管理学习归档-2020-0624
- 如何让主机合规分析报告评分达到90分?
- ImageView.ScaleType 属性值
- 概率图模型之EM算法
- 用计算机给plc编程,plc编程用什么电脑?plc编程用什么配置电脑
- PMP第六版 十五至尊图
- 日报软件测试培训,深信苦尽甘来 在千锋软件测试培训中挥洒汗水收获成功
- 性能测试培训总结-spotlight on mysql
- Briarcliff Entertainment 购买了关于开创性的非裔美国 NBA 球员的电视剧“Sweetwater”(独家)
- android 禁止跟随系统字体,Android 应用全局字体调节或禁止随系统字体大小更改...
- SpringBoot 内嵌容器
热门文章
- 360手机浏览器_网信办出手:华为、360、qq等8款手机浏览器被列入首批重点整治名单...
- Python批量导入Excel文件中的不重复数据到SQLite数据库
- 使用Python批量修改PPTX文件中文本框格式
- 详解Python中的位运算符规则、原理与用法
- LeetCode-27 移除元素
- 视频服务器读取hdfs文件,基于HDFS的流媒体服务器Red5视频文件分发的研究与应用...
- html5泵站,基于 HTML5 WebGL 的污水处理厂泵站自控系统
- 多系统引导工具支持Linux,多系统引导工具(BootThink)
- 3文件提取器_奇淫巧技 | 快速批量提取 PPT 中所有图片素材方法
- python开发环境一般用哪个快递_基于Python的常用快递sdk调用代码实例