【工具类的编写】

编写工具类

最近在写一个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;固定端和支撑…

TLS + OpenSSL + Engine + PKCS#11 + softhsm2 安全通信

引擎库路径只有在 /lib 下才能被 "LOAD" 识别到&#xff0c;OpenSSL的ReadMe给的示例在/lib&#xff0c;看源码才能知道为何不能任意指定路径 // #define PKCS11_ENGINE_PATH "/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so" #define PKCS11_ENGINE_P…

线性代数|机器学习-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 正在为其…

服务器重启后jenkins任务内容不见了,并且新建任务也不见了

服务器centos7.4 背景&#xff1a;服务器异常重启后&#xff0c;jenkins上面的任务只剩下一些前端项目&#xff0c;后端的任务都不展示了&#xff0c;jenkins版本是Jenkins 2.346.3 解决方案&#xff1a;根据显示&#xff0c;jenkins很多的插件引用失败&#xff0c;显示需要升…

ModuleNotFoundError: No module named ‘h5py‘

到 ModuleNotFoundError: No module named h5py 错误表明 Python 环境中没有安装 h5py 模块。h5py 是一个用于处理 HDF5 二进制数据格式的 Python 接口&#xff0c;广泛用于大规模存储和操纵数据。 解决方案&#xff1a;安装 h5py 要解决这个问题&#xff0c;你需要在你的 Py…

报错:ERROR_ No matching distribution found for gitpython_=3.1.30

版本不匹配 当前安装环境&#xff1a;python3.8 pytorch2.1.2 预估pytorch版本太高 重新安装环境&#xff1a;python3.9 pytorch1.9.1 问题得到解决 python和pytorch对应版本参考

mvn配置中repository和mirror的区别

文章目录 前言一、 repository二、 mirror三、 具体区别四、 使用场景总结 前言 平时在配置mvn仓库地址的时候&#xff0c;总是会百度一下&#xff0c;有时候文章让用repository配置&#xff0c;有时候用mirror&#xff0c;配置起来都能用&#xff0c;于是就不怎么在意他们的区…

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;西宁市城西区青海东大肛肠医…

No module named ‘tvtk.custom.light‘

pip list numpy是2.0.0 mayavi报错&#xff1a; File "tvtk_classes/tvtk_helper.py", line 22, in get_module ModuleNotFoundError: No module named tvtk.custom.light 解决方法&#xff1a; pip install numpy1.26 mayavi 4.8.2 vtk 9.3.0

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

在数字化浪潮的推动下&#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…