【工具类的编写】

news2024/12/26 23:42:58

编写工具类

最近在写一个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.coloradmin.cn/o/1857797.html

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

相关文章

Docker编译nanopc-t4源码流程介绍

官方文档 Android系统编译 vnc加环境变量配置 https://github.com/friendlyarm/docker-cross-compiler-novnc 下载 git clone https://github.com/friendlyarm/docker-ubuntu-lxde-novnc cd docker-ubuntu-lxde-novnc docker build --no-cache -t docker-ubuntu-lxde-novnc …

Web 应用开源项目大全

Web 应用开源项目大全结合巴比达内网穿透实现WEB公开访问。 下面是一个Web应用的开源列表。没什么可说的&#xff0c;太疯狂了。尤其是Web 2.0那一堆。我不知道你怎么想&#xff0c;有些开源项目的源码写得挺不好的&#xff0c;尤其是性能方面。或许你会以为改一改他们就可以成…

《知人寻香—2024香水香氛趋势白皮书》

本报告由小红书联合凯度中国共同发布:《知人寻香—2024香水香氛趋势白皮书》。这份报告细致描绘了中国香水市场的五大消费人群特征和六大消费趋势,为香水品牌提供了丰富的创新灵感。它不仅分析了中国香水市场目前的发展趋势,还预测了未来市场的潜在增长,以及消费者对香水香氛产…

el-form-item的label设置两端对齐

<style scoped> ::v-deep .el-form-item__label {display: inline;text-align-last: justify; } </style>效果如图所示

人工ai智能写作,分享推荐三款好用软件!

在数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;而在内容创作领域&#xff0c;AI智能写作软件更是如雨后春笋般涌现。今天&#xff0c;就为大家分享三款备受好评的AI智能写作软件&#xff0c;让你轻松掌握高效写作的秘密…

如何使用Python和PaddleOCR轻松识别图片中的文字

在这个数字化时代&#xff0c;文本识别技术变得越来越重要&#xff0c;它广泛应用于文档自动化处理、内容审核、智能交互等场景。本文将引导你如何使用Python结合PaddleOCR库&#xff0c;轻松实现图片中的文字识别功能。 必备工具包安装 在开始编写代码之前&#xff0c;你需要…

Django教程(001):安装及快速上手

1.1 Django安装 pip install django安装之后 c:\python39-python.exe-Scripts-pip.exe-django-admin.exe【安装django之后&#xff0c;工具&#xff0c;创建django项目】-Lib-内置模块-site-packages-flask-django(安装django之后&#xff0c;【django框架源码】)如下图&…

仓库专用高压弓静音版驱鸟器详解

仓库不仅仅储存着各式各样的物品&#xff0c;还可能成为野生鸟类的栖息地。鸟类可能会在仓库内寻找食物&#xff0c;例如小型虫子和昆虫&#xff0c;或残留的食物。它们的觅食行为不仅可能污染货物&#xff0c;还可能对仓库的设施和结构造成损害。 采取有效的驱鸟措施&#xff…

有什么能和ai聊天的软件?5个软件教你快速和ai进行聊天

有什么能和ai聊天的软件&#xff1f;5个软件教你快速和ai进行聊天 当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术已经逐渐渗透到我们的日常生活中&#xff0c;而与AI进行聊天也成为了一种趋势和乐趣。以下是五款可以和AI进行聊天的软件&#xff0c;它们提…

ai智能写作一键生成的软件盘点,4款宝藏!

在信息爆炸的时代&#xff0c;内容创作已成为各行各业的刚需。然而&#xff0c;对于许多创作者来说&#xff0c;如何高效、高质量地输出内容却是一个不小的挑战。幸运的是&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI智能写作软件应运而生&#xff0c;它们凭借一键生…

酒壮怂人胆 男子酒后疯狂踹门被拘

&#xff08;通讯员&#xff1a;高园&#xff09;俗话说&#xff0c;小酒怡情&#xff0c;酗酒伤身。许多人在下班后都喜欢“喝两杯”&#xff0c;可一旦醉意上头&#xff0c;可就各有各表现了。有的人困意袭来&#xff0c;呼呼大睡&#xff1b;有的人失去理智&#xff0c;疯狂…

oracle报错-ORA-12638:身份证明检索失败

navicat16连接本地oracle数据库成功后&#xff0c;连接远程数据库&#xff0c;同样是oracle11g&#xff0c;确认网络、用户名、密码都没问题的情况下&#xff0c;报错ora-12638。 解决方法&#xff1a; 这是由于Oracle的认证方式使用了本地操作系统认证&#xff08;NTS&#x…

图像处理Python库--图片裁剪、缩放、灰度图、圆角等

图像处理Python库 py-img-processor1. 安装2. 使用(Usage)2.1 运行配置2.2 图像处理处理函数图像处理参数为字符串图像处理参数为JSON 命令行提取图像主色调 py-img-processor Image editor using Python and Pillow. 依赖Pillow开发的Python库&#xff0c;用于图像编辑处理。…

【从零开始认识AI】梯度下降法

目录 1. 原理介绍 2. 代码实现 1. 原理介绍 梯度下降法&#xff08;Gradient Descent&#xff09;是一种用于优化函数的迭代算法&#xff0c;广泛应用于机器学习和深度学习中&#xff0c;用来最小化一个目标函数。该目标函数通常代表模型误差或损失。 基本思想是从一个初始…

多路h265监控录放开发-(14)

首先创建一个新类XCalendar继承QCalendarWidget类&#xff0c;然后在UI视图设计器中把日历提升为XCalendar&#xff0c;通过这个函数自己设置日历的样式 xcalendar.h #pragma once #include <QCalendarWidget> class XCalendar :public QCalendarWidget { public:XCal…

「动态规划」如何求最长摆动子序列的长度?

376. 摆动序列https://leetcode.cn/problems/wiggle-subsequence/description/ 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也…

【鸿蒙】ArkTS语言

HarmonyOS 应⽤的主要开发语⾔是 ArkTS&#xff0c;它由 TypeScript&#xff08;简称TS&#xff09;扩展⽽来&#xff0c;在继承 TypeScript语法的基础上进⾏了⼀系列优化&#xff0c;使开发者能够以更简洁、更⾃然的⽅式开发应⽤。 值得注意的是&#xff0c;TypeScript 本身也…

练习实践:ubuntu18.04安装、配置Nginx+PHP环境,两种配置方式,多站点

参考来源&#xff1a; https://help.aliyun.com/document_detail/464753.html https://www.cnblogs.com/laosan007/p/12803287.html https://blog.csdn.net/qq_55364077/article/details/132207083 【安装同版本7.2的php】 需要知道对应php和nginx的安装版本 需要安装php-fpm…

持续增强国产适配 | 宁盾身份域管与南大通用、飞腾完成产品兼容性认证

随着党政、央国企、金融信创国产化改造日益深入&#xff0c;企业对国产 IT 基础设施生态兼容适配的需求日益迫切。为践行给企业提供“开箱即用”的交付体验承诺&#xff0c;宁盾身份域管持续增强多元异构产品的兼容适配。近日&#xff0c;宁盾身份域管与天津南大通用数据技术股…

基于Java协同过滤算法的图书推荐系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…