超级好用的C++实用库之文件目录操作

💡 需要该C++实用库源码的大佬们,可扫码关注文章末尾的微信公众号二维码,或搜索微信公众号“希望睿智”。添加关注后,输入消息“超级好用的C++实用库”,即可获得源码的下载链接。

概述

        文件和目录操作是操作系统层面上的基础功能,允许用户或程序对磁盘上的文件以及目录结构进行管理。文件操作主要包括:创建文件、打开文件、读写文件内容、移动或定位文件指针以及关闭文件等功能,目录操作主要包括:创建目录、删除目录、移动目录、重命名目录、列出目录内容等功能。在C/C++编程中,除了标准库提供的stdio.h中的文件和目录操作函数外,还可以利用POSIX API (dirent.h, unistd.h) 或Windows API来进行更底层的操作。

CHP_File类

        在Windows和Linux操作系统下进行文件和目录操作的系统API并不相同,比如:对于创建目录的操作,Windows下使用CreateDirectory函数,Linux下使用mkdir函数。为了封装跨平台的文件目录操作,我们实现了CHP_File类。CHP_File类的头文件,可参考下面的示例代码。

#pragma once#include <string>
#include <vector>typedef void *HFileFinder;class CHP_File
{
public:static int GetFileTime(const char *pszFile, time_t &tmCreated, time_t &tmModified);static int GetFileSize(const char *pszFile, unsigned int &uiSizeBytes);static int CreateDir(const char *pszDir, bool bRecursive = true);static int RemoveDir(const char *pszDir, bool bIgnoreError = true);static void FindFiles(const char *pszDir, const char *pszFilter, std::vector<std::string> &vctFile, bool bRecursive = true);static void FindSubDirs(const char *pszDir, std::vector<std::string> &vctSubDir, bool bRecursive = true);static char *FindOpen(HFileFinder &hFinder, const char *pszDir, bool bFindDir, char *pszFile, int nFileLen);static char *FindNext(HFileFinder hFinder, const char *pszDir, bool bFindDir, char *pszFile, int nFileLen);static void FindClose(HFileFinder hFinder);private:CHP_File();~CHP_File();static char *FindFile(HFileFinder &hFinder, const char *pszDir, bool bFindDir, char *pszFile, int nFileLen, bool bFirst);#ifdef _WIN32static bool RemoveExistingDir(const char *pszDir);static bool RemoveExistingFile(const char *pszFile);
#endif
};

        CHP_File类是一个接口类,不需要实例化。因此,我们将构造函数和析构函数声明成了私有的,并提供了9个静态函数。下面,我们将分别介绍这几个导出的公共接口。

        GetFileTime:获取文件的创建时间和修改时间。参数pszFile为文件名,参数tmCreated为文件的创建时间,参数tmModified为文件的修改时间,返回值为0表示成功,其他为错误码。

        GetFileSize:获取文件的大小。参数pszFile为文件名,参数uiSizeBytes为文件大小,单位为字节,返回值为0表示成功,其他为错误码。

        CreateDir:创建目录。参数pszDir为待创建的目录名,参数bRecursive表示是否递归创建所有目录,返回值为0表示成功,其他为错误码。

        RemoveDir:删除目录。参数pszDir为待删除的目录名,参数bIgnoreError表示是否忽略错误,返回值为0表示成功,其他为错误码。

        FindFiles:查找指定目录下的文件。参数pszDir为待查找的目录;参数pszFilter为过滤器,支持'?'和'*',为NULL或空字符串时,表示查找所有文件;参数vctFile为符合条件的所有文件;参数bRecursive表示是否递归子目录查找。

        FindSubDirs:查找指定目录下的目录。参数pszDir为待查找的目录,参数vctSubDir为符合条件的所有目录,参数bRecursive表示是否递归子目录查找。

        FindOpen:打开文件查找,适用于逐个查找文件。参数hFinder为文件查找的句柄;参数pszDir为待查找的目录;参数bFindDir表示查找目录还是文件,true表示查找目录,false表示查找文件;参数pszFile为找到的文件名或者目录名;参数nFileLen为文件名或者目录名的长度。返回值为非NULL表示找到,是找到的文件名或目录名的buffer指针,否则表示未找到。

        FindNext:查找下一个文件。参数hFinder为文件查找的句柄;参数pszDir为待查找的目录;参数bFindDir表示查找目录还是文件,true表示查找目录,false表示查找文件;参数pszFile为找到的文件名或者目录名;参数nFileLen为文件名或者目录名的长度。返回值为非NULL表示找到,是找到的文件名或目录名的buffer指针,否则表示未找到。

        FindClose:关闭文件查找。参数hFinder为文件查找的句柄。

总结

        在CHP_File类中,我们封装了获取文件的创建时间和修改时间、获取文件的大小、创建目录、删除目录、查找指定目录下的文件、查找指定目录下的目录、打开文件查找、查找下一个文件、关闭文件查找等跨平台的功能和函数。这些函数,是通过兼容多种操作系统API,或使用标准库提供的函数来实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4D 成像毫米波雷达:新型传感器助力自动驾驶

1 感知是自动驾驶的首要环节&#xff0c;高性能传感器必不可少 感知环节负责对侦测、识别、跟踪目标&#xff0c;是自动驾驶实现的第一步。自动驾驶的实现&#xff0c;首先要能够准确理解驾驶环境信息&#xff0c;需要对交通主体、交通信号、环境物体等信息进行有效捕捉&#x…

热爱电子值得做的电子制作实验

加我zkhengyang&#xff0c;进嵌入式音频系统研究开发交流答疑群(课题组) AM/FM收音机散件制作&#xff0c;磁带随声听散件&#xff0c;黑白电视机散件制作&#xff0c;功放散件制作&#xff0c;闪光灯散件制作&#xff0c;声控灯散件&#xff0c;等等&#xff0c;可提高动手能…

MultiBoot 和 QuickBoot

目录 MultiBoot简介MultiBoot 实现方式设置 bitstream 属性使用 ICAPE2 原语WBSTAR 寄存器定义 MultiBoot 工作流程生成mcs固化文件 Tcl 指令Fallback状态寄存器MultiBoot 正常加载状态看门狗1超时状态看门狗2超时状态CRC 错误和无 DESYNC 命令IDCODE 错误状态CRC 错误状态 Wat…

17 【Aseprite 作图】参考图和颜色

参考图 Aseprite 作图&#xff0c;“打开 - 一张参考图”&#xff0c;再把参考图拉到右边&#xff0c;就可以得到参考图和缩略图 取消选区 通过“选择 - 取消选择”&#xff0c;可以 取消选区 复制参考图的颜色 打开参考图后&#xff0c;参考图的调色板就会出现参考图所有的…

202466读书笔记|《一天一首古诗词》——借问梅花何处落,风吹一夜满关山

202466读书笔记|《一天一首古诗词》——借问梅花何处落&#xff0c;风吹一夜满关山 上册下册 《一天一首古诗词》作者李锡琴&#xff0c;蛮早前加入书架的已购买书籍&#xff0c;这次刚好有点时间&#xff0c;利用起来读完。 赏析没有细看&#xff0c;只读了诗词部分&#xff0…

Java数组的应用---选择排序(Select Sort)

一、需求&#xff1a;选择排序(Select Sort)&#xff0c;进行升序显示 在一组排列中把最大的数取出来放在一个新的列表里&#xff0c;再删去&#xff0c;在取最大的数出来&#xff0c;依次类推直到取到最后一个数字 二、定义一个无序的一维数组&#xff0c;并输出数组 程序运…

LabVIEW自动机械变速器(AMT)开发

LabVIEW自动机械变速器&#xff08;AMT&#xff09;开发 在现代汽车工业中&#xff0c;提升车辆的自动化水平和驾驶体验是一个不断追求的目标。随着技术的发展&#xff0c;自动机械变速器&#xff08;AutomatedMechanical Transmission, AMT&#xff09;凭借其较高的能效和较低…

面向对象 03:类与对象的创建、初始化和使用,通过 new 关键字调用构造方法,以及创建对象过程的内存分析

一、前言 记录时间 [2024-05-10] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 11&#xff1a;Java 方法相关内容&#xff0c;方法的设计原则&#xff0c;以及方法的定义和调用 面向对象 01&#xff1a;Java 面向对…

element-plus el-time-picker 时间段选择(可多选)

实现一个如图的时间段选择器 处理好时间回显逻辑&#xff0c;组件内[‘’,‘’],后端数据[{startTime:‘’,endTime:‘’}]处理好加和减的显示逻辑 <template><div><div v-for"(item, index) in currentChoose" :key"index" class"fl…

数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库(20240507)

数据库管理184期 2024-05-07 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20240507&#xff09;1 JSON需求2 关系型表设计3 JSON关系型二元性视图3 查询视图总结 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20…

数据库表自增主键超过代码Integer长度问题

数据库自增主键是 int(10) unsigned类型的字段&#xff0c;int(M) 中 M指示最大显示宽度&#xff0c;不代表存储长度&#xff0c;实际int(1)也是可以存储21.47亿长度的数字&#xff0c;如果是无符号类型的&#xff0c;那么可以从0~42.94亿。 我们的表主键自增到21.47亿后&#…

信息系统项目管理基础

目录 一、项目管理概论 1、定义 2、项目管理的十二原则 3、SMART原则 4、项目经理 5、项目的生命周期 二、项目立项管理 1、项目启动过程 三、项目整合管理 1、管理基础 2、项目整合管理过程 ①制定项目章程 ②制定项目管理计划 ③指导与管理项目工作 ④管理项目…

谷歌AlphaFold 3首发Nature,预测精准度提高100%,AI能帮助治疗癌症和免疫病 | 最新快讯

刚刚&#xff0c;顶级科学期刊英国《Nature》&#xff08;自然&#xff09;杂志发表了一份重磅、突破性研究论文。 北京时间 5 月 8 日 23 点&#xff0c;谷歌 DeepMind 和其英国子公司 Isomorphic Labs 联合团队在《自然》杂志上发表一份共 46 页的重要成果&#xff0c;联合发…

计算图与自动微分

计算图与自动微分 一、自动梯度计算1.1 数值微分&#xff08;Numerical Differentiation&#xff09;1.2 符号微分&#xff08;Symbolic Differentiation&#xff09;1.3 自动微分&#xff08;Automatic Differentiation&#xff0c;AD&#xff09;1.3.1 计算图1.3.2 正向传播1…

Java Stream

1. Stream API概述 Java 8 Stream是Java 8中引入的一个新的API&#xff0c;用于处理集合和数组等数据结构的元素。它允许您在数据集上进行功能性操作&#xff0c;例如过滤、映射、排序等&#xff0c;而不需要编写循环或迭代器等底层代码。 Java 8 Stream与集合不同&#xff0c;…

动态表名 的使用方法

动态表名插件的底层是 拦截器 1&#xff0c;创建一个拦截器 Configuration public class MybatisConfiguration {Beanpublic DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor() {// 准备一个Map&#xff0c;用于存储TableNameHandlerMap<String, Table…

MySQL索引(聚簇索引、非聚簇索引)

了解MySQL索引详细&#xff0c;本文只做整理归纳&#xff1a;https://blog.csdn.net/wangfeijiu/article/details/113409719 概念 索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;使用索引可快速访问数据库表中的特定信息。 索引分类 主键索引&#xff1a…

Conda安装rasterio报错

Conda安装rasterio报错 文章目录 Conda安装rasterio报错问题解决参考 问题 在conda环境中安装rasterio包之后&#xff0c;本来可以正常运行的&#xff0c;但是之后又重新安装了一个gdal&#xff0c;导致原来的引用rasterio的包的程序不可正常运行了 conda install rasterio c…

基于Springboot的民航网上订票系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的民航网上订票系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

[附源码]石器时代_恐龙宝贝内购版_三网H5手游_带GM工具

石器时代之恐龙宝贝内购版_三网H5经典怀旧Q萌全网通手游_Linux服务端源码_视频架设教程_GM多功能授权后台_CDK授权后台 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff0…