【工具类的编写】

编写工具类

最近在写一个C++的项目,发现编写项目的过程真是曲折,所以写通过博客方式来对本项目进行一个重新的梳理。以便于自己来更好的了解这个项目。

1. 时间类的编写

我们都知道在C++中获取时间戳很简单,但是怎么把一个时间戳转换为我们平时所看的时间还是不太了解。通过了解发现了一个函数可以把对应格式的时间信息写到字符串当中。但是我们还是要把一个时间的信息放到结构体当中。话不多说,直接上代码

class Time
{public:static std::string getTime(){// 获取时间戳time_t t = time(nullptr);struct tm st;// 将时间戳解析出来各种信息放到定义出来的结构体当中localtime_r(&t, &st);char tmp[128];// 把我们需要的时间格式放到一个字符数组当中strftime(tmp, 127, "%H:%M:%S", &st);return tmp;}
};

运行结果如下:
在这里插入图片描述

2. 文件类的编写

我们这个项目可能用到的功能:

  1. 判断这个文件是否存在
  2. 获取此文件的父目录
  3. 创建一个文件

接下来进行分别实现:

2.1 判断这个文件是否存在

如何判断一个文件是否存在,我们可以调用Linux的一个库函数。

class File
{public:static bool isExists(const std::string& pathname){struct stat st;return stat(pathname.c_str(), &st);}
};
修改后的:
class File
{public:static bool isExists(const std::string& pathname){struct stat st;return stat(pathname.c_str(), &st);}
};

2.2 获取此文件的父目录

获取父目录只需要找到最后一个“/”的位置,分割出来就可以了

class File
{public:static std::string getPath(const std::string pathname){// "abc/a/b/a.txt"// "b.txt"size_t pos = pathname.find_last_of("/\\");if (pos == std::string::npos){return "./";}return pathname.substr(0, pos + 1);}};

测试结果如下:
在这里插入图片描述

2.3 创建一个文件

我们知道这个文件传进来的时候可能还包含父目录,所以我们需要判断每一层的父目录是否存在。

在编写创建文件的工具方法时,遇到一个程序一直死循环的问题,这个时候就不得不调试运行一个看看问题出在哪里。
通过调试发现原来是判断文件是否存在这个方法写错了,少写了一个判断。。。。
新修改的放在原来文件的下面了。我们重新运行一下看看。还是不对,继续调试。
原来是传递的时候直接把整个文件名字传进来了,我们只需要父目录就可以了
真操蛋啊。
原来这个方法只是为了创建父目录啊,我们是不需要创建具体的文件的
代码如下:

class File
{public:static void createFile(const std::string& pathname){// "abc/a/b/a.txt"// "b.txt"size_t idx = 0;while (idx < pathname.size()){size_t pos = pathname.find_first_of("/\\", idx);// 只有在最后一层的目录时,我们才可以直接创建整体,否则可能更改现有// 的目录if (pos == std::string::npos){mkdir(pathname.c_str(), 0777);}std::string parent_id = pathname.substr(0, pos + 1);if (isExists(parent_id)){idx = pos + 1;continue;}mkdir(parent_id.c_str(), 0777);idx = pos + 1;}}
};

到这里工具类就编写完成了。

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

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

相关文章

精密机械中的滚珠螺杆与螺杆支撑座的完美配合!

螺杆支撑座和滚珠螺杆是机械设备中的重要部件。滚珠螺杆通常运用在自动化设备中&#xff0c;需高速运动、高精度定位均依靠它的优良性能&#xff0c;如机床&#xff0c;数控、工业机器人等机械设备。螺杆支撑座装在螺杆的两端&#xff0c;支撑座有两端&#xff0c;固定端和支撑…

线性代数|机器学习-P18快速下降奇异值

文章目录 1. 为什么要低秩矩阵 1. 为什么要低秩矩阵 我们的世界里面有很多数据&#xff0c;如果我们原封不动的发送数据&#xff0c;那么会导致数据量的增大&#xff0c;我们希望对数据进行压缩后再打包压缩&#xff0c;这样的话我们能够在带宽一定的情况下发送更多的数据&…

通过ETLCloud实现SQL Server数据同步至Oracle

SQL Server与Oracle作为全球两大主流的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;在企业级应用中扮演着至关重要的角色。它们各自凭借独特的技术优势、强大的数据处理能力以及高度的可扩展性&#xff0c;支撑着从中小型企业到大型跨国公司的各类复杂业务需…

区块链学习03-空投篇

Hybrid 是与 以太坊 兼容的第 2 层区块链&#xff0c;集成了混合专家 (MoE) 框架&#xff0c;支持以即插即用的方式轻松创建和货币化 AI 代理。该平台旨在提高区块链应用程序中数据的完整性和可用性&#xff0c;支持跨各个行业开发和部署 AI 驱动的解决方案。 Hybrid 正在为其…

EcmaScript6全新语法特性-----EcmaScript6(1)

age : 20,language : "Eng"}// 对象也可以用结构表达式来获取对应的值const { name,age,language} person;// 这样可以将我们获取的值name变成abc这个变量// const { name:abc,age,language} person;// 字符串拓展let str "Hello,vue";// 判断是否以xxx…

.idea文件夹里面iml文件有啥用

.idea文件夹和其中的.iml文件对于IntelliJ IDEA项目非常重要&#xff0c;它们共同构成了IDEA对项目理解的基础。让我们详细了解一下这两者的作用&#xff1a; .idea文件夹 .idea文件夹包含了IntelliJ IDEA项目的所有配置信息&#xff0c;包括但不限于&#xff1a; 编译器设置…

中考加油 医路护航有青海东大肛肠医院

中考临近&#xff0c;考生的健康成了家长最为关心的问题。科学饮食不但可以促进广大考生的身体在炎热季节中正常代谢&#xff0c;而且能够很好地提高他们的学习效率&#xff0c;改善他们迎考状态&#xff0c; 助力考生调整状态迎接考试&#xff0c;西宁市城西区青海东大肛肠医…

七人团购新体验:解锁数字时代购物新篇章

在数字化浪潮的推动下&#xff0c;购物体验正迈向新的里程碑。其中&#xff0c;七人团购模式以其独特的魅力和创新性&#xff0c;为消费者带来了前所未有的实惠与便利。现在&#xff0c;让我们一同探索这一新兴购物模式的运作机制与潜在价值&#xff0c;特别是针对一款标价599元…

宝塔面板一键迁移项目站点教程

此插件仅用于将当前机器数据迁移出去&#xff0c;数据接收机器无需安装此插件。 注意事项&#xff1a; 当前教程仅适用《宝塔一键迁移API版本》插件&#xff0c;版本号 >3.0。 推荐迁移面板版本 > 6.9.5&#xff0c;低版本迁移可能存在部分数据无法迁移成功。 面板版…

cube studio开源一站式机器学习平台:k3s部署cube-studio

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; 一站式云原生机器学习平台 前言 开源地址&#xff1a;https://github.com/tencentmusic/cube-studio cube studio 腾讯开源的国内最热门的一站式机器学习mlops/大模型训练平台&#xff0c;支持多租户&…

解决Element-ui的el-table固定列后出现的表格错位问题

问题情况大致是这样的&#xff1a; 查看官网 解决办法&#xff1a;

RubyMine 2024 mac/win版:智慧编程,从心出发

JetBrains RubyMine 2024 是一款专为Ruby和Rails开发者打造的高效集成开发环境(IDE)。它凭借其卓越的性能和丰富的功能&#xff0c;帮助开发者在Ruby和Rails的开发过程中提升效率&#xff0c;减少错误。 RubyMine 2024 mac/win版获取 RubyMine 2024 提供了强大的代码编辑功能&…

科东软件@你逛华南工博会,展会亮点给你整理好了

随着工业AI、5G、边缘计算等前沿技术的迅速发展&#xff0c;未来工业正朝着大规模智能生产和柔性生产的方向稳步迈进。东土科技紧跟产业发展潮流&#xff0c;结合自身在工业底层控制技术、网络技术等方面的深厚积累&#xff0c;积极创新。 亮点带你看 鸿道操作系统&#xff0…

VMware Workstation安装Windows Server2019系统详细操作步骤

虚拟机版本 VMware Workstation 16 Prp 16.2.5 build-20904516 实现操作 创建虚拟机 创建新的虚拟机 自定义->下一步 默认即可&#xff0c;下一步 稍后安装操作系统->下一步 按照图下所示选择好系统->下一步 设置好虚拟机名称和位置->下一步 默认即可&#xff0…

5个wordpress成品站主题

Sora索啦高端制造业wordpress主题 红色高端制造业wordpress主题&#xff0c;适合外贸企业出海建独立站的wordpress模板。 https://www.jianzhanpress.com/?p5885 Polar钋啦wordpress外贸主题 制造业wordpress网站模板&#xff0c;适合生产制造企业官方网站使用的wordpress外…

mock-前端数据模拟

简介 数据模拟不是开发流程中的必要一环 Json-server 简介&#xff1a; json-server 是一个简单的 Node.js 服务端应用程序&#xff0c;这个工具的主要作用是提供一个模拟的后端服务&#xff0c;可以在前端开发过程中独立于后端进行简单工作。 使用&#xff1a; 1、 安装…

桌面编辑器ONLYOFFICE 功能多样性快来试试吧!

目录 ONLYOFFICE 桌面编辑器 8.1 ONLYOFFICE介绍 主要功能和特点 使用场景 1.PDF编辑器 2.幻灯片版式 3.编辑&#xff0c;审阅和查看模式 4.隐藏连接到云版块 5.RTL语言支持和本地化选项 6.媒体播放器 7、其他新功能 8.下载 总结 ONLYOFFICE 桌面编辑器 8.1 官网地…

[Linux]缓冲区

一、概念 缓冲区&#xff0c;也称为缓存&#xff0c;是内存空间的一部分。也就是说&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;用来缓冲输入或输出的数据。这个保留的空间称为缓冲区。 缓冲区的主要作用就是提高效率&#xff1a; 提高使用者的效率&#xff0…

大家都爱用!不可错过的 AI API 接口

AI API&#xff08;人工智能应用程序接口&#xff09;是一种软件中间件&#xff0c;它允许开发者和企业通过编程方式访问和集成人工智能服务到他们自己的应用程序、网站或系统中。AI API通常由专业的AI服务提供商开发和维护&#xff0c;使得用户无需深入了解复杂的AI算法和模型…

AI视频改字系统+五端兼容+卡密兑换+内置素材,系统搭建部署

目录 前言&#xff1a; 一、AI视频改字系统是什么 二、AI视频改字系统的功能 三、总结 前言&#xff1a; AI视频改字是利用套模板的原理&#xff0c;对短视频的模板进行更改&#xff0c;从而生成新的短视频。当然这个AI短视频改字系统都是有素材的&#xff0c;不用自己上传…