首页 > 其他分享 >实用工具类及测试

实用工具类及测试

时间:2023-08-21 22:00:54浏览次数:526  
标签:std string idx 实用工具 pos pathname 测试 类及 include

实用工具类

// 实用工具类的实现
// 避免头文件重复包含
#ifndef __M_UTIL_H__
#define __M_UTIL_H__
#include <iostream>
#include <unistd.h>
#include <ctime>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
namespace nmzlog{
    // 在nmzlog命名空间中进行定义
    namespace util{
        class Date{
        public:
            // 定义获取当前系统时间函数
            // 定义成静态成员函数,不用实例化对象可以直接调用
            static size_t now()
            {
                // 类型转换
                return (size_t)time(nullptr);
            }
        };
        class File{
        public:
            // 都定义成静态成员函数,不用去实例化对象直接调用
            // 判断文件是否存在,参数是传入的路径名
            static bool exist(const std::string& pathname)
            {
                // access函数检测用户对于这个文件是否有操作权限,还可以判断文件是否存在,在头文件unistd.h
                // 文件存在返回0,不存在返回-1
                // return (access(pathname.c_str(),F_OK) == 0);
                // 为了更好的移植性,我们可以使用stat获取文件属性,成功了代表文件存在,不成功表示文件不存在
                // 在头文件<sys/types.h>\<sys/stat.h>\<unistd.h>中
                struct stat st;
                // 如果小于0,返回false
                if(stat(pathname.c_str(),&st) < 0)
                {
                    return false;
                }
                return true;
            }
            // 获取当前文件所在路径,参数是传入的路径名,返回的是文件路径
             static std::string path(const std::string& pathname)
             {
                // 找到最后一个\\/的位置
                size_t pos = pathname.find_last_of("\\/");
                if(pos == std::string::npos)
                {
                    return ".";
                }
                //返回要截取的长度,坐标是从0开始计算的,所以如果想截取/就要+1
                return pathname.substr(0,pos+1);
             }
            // 创建目录
            static void createDirectory(const std::string& pathname)
            {
                // 创建目录时需要一层一层的创建
                // pos用来查找\\/的位置,idx用来标定查找的起始位置
                size_t pos = 0,idx = 0;
                while(idx < pathname.size())
                {
                    // 从开始位置去找
                    pos = pathname.find_first_of("/\\",idx);
                    if(pos == std::string::npos)
                    {
                        // 此时路径中没有\\/,如a.txt,此时就可以直接创建目录
                        // 创建目录时需要使用到mkdir系统接口,在头文件<sys/stat.h>\<sys/types.h>中
                        // mkdir(const char* pathname,mode_t mode);第二个参数是创建出来的文件目录的权限
                        mkdir(pathname.c_str(),0777);
                        break;
                    }
                    // 如果找到了\,那么就要先创建父级目录,pos是\的位置,+1是将\也截取出来了
                    std::string parent_dir = pathname.substr(0,pos+1);
                    // 判断父级目录是否存在,这里的exist也会判断.和..的情况
                    if(exist(parent_dir) == true)
                    {
                        // 如果存在更新idx的位置,跳出本次循环
                        idx = pos + 1;
                        continue;
                    }
                    // 如果父级目录不存在就创建
                    mkdir(parent_dir.c_str(),0777);
                    idx = pos + 1;//创建之后更新idx的位置
                }
            }
        };
    }
}
#endif

实用工具类测试

#include "util.hpp"
// 实用工具类的测试
int main()
{
    // 获取当前系统时间,获取的是时间戳
    std::cout << nmzlog::util::Date::now() << std::endl;
    // 先判断文件是否存在,然后创建目录,再获取路径名
    std::string pathname = "./abc/def/txt.log";
    // 如果文件不存在,创建目录
   if(nmzlog::util::File::exist(pathname) == false)
   {
        nmzlog::util::File::createDirectory(pathname);
        std::cout << "创建成功\n";
   }
    // 获取文件路径名中的路径 
    nmzlog::util::File::path(pathname);
}

标签:std,string,idx,实用工具,pos,pathname,测试,类及,include
From: https://blog.51cto.com/u_15562309/7180278

相关文章

  • chrony-wait测试
    20关机,21开机,chrony-wait设置开机启动,RemainAfterExit值为no测试准备开机时钟源机器20,一段时间后客户端出现报错信息客户端,时间没有同步。重启chrony-wait服务现在才同步正常,说明chrony-wait运行之后才会是这个样子......
  • pod 反亲和测试验证
    场景需求node节点上不允许有两个一样的pod,即每个节点上每个应用仅仅允许一个pod运行测试yaml[root@k8sNode0podqinhexing]#cattest.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:nginxspec:selector:matchLabels:app:nginxrepli......
  • 实现单元测试和集成测试的.NET最佳实践
    实现单元测试和集成测试的.NET最佳实践在现代软件开发中,测试是确保应用程序质量和稳定性的关键步骤。在.NET开发中,单元测试和集成测试是两种常见的测试类型,它们有助于在开发过程中及时发现和修复问题。本篇博客将介绍.NET中实现单元测试和集成测试的最佳实践,以确保您的应用程序具有......
  • RunnerGo中WebSocket、Dubbo、TCP/IP三种协议接口测试详解
    大家好,RunnerGo作为一款一站式测试平台不断为用户提供更好的使用体验,最近得知RunnerGo新增对,WebSocket、Dubbo、TCP/IP,三种协议API的测试支持,本篇文章跟大家分享一下使用方法。WebSocket协议WebSocket是一种在单个TCP连接上进行全双工通信的API技术。相比于传统的HTTP请求,We......
  • RunnerGo中WebSocket、Dubbo、TCP/IP三种协议接口测试详解
    大家好,RunnerGo作为一款一站式测试平台不断为用户提供更好的使用体验,最近得知RunnerGo新增对,WebSocket、Dubbo、TCP/IP,三种协议API的测试支持,本篇文章跟大家分享一下使用方法。WebSocket协议WebSocket是一种在单个TCP连接上进行全双工通信的API技术。相比于传统的HTTP请......
  • 高频SQL 50题(基础版): 学生们参加各科测试的次数 | 2023-08-21
    问题学生表:Students+---------------+---------+|ColumnName|Type|+---------------+---------+|student_id|int||student_name|varchar|+---------------+---------+在SQL中,主键为student_id(学生ID)。该表内的每一行都记录有学校一名学生......
  • 软件测试|Linux基础教程:ln命令与软链接和硬链接
    简介在Linux系统中,ln命令是一个非常有用的工具,用于创建链接(link),将一个文件或目录链接到另一个位置。链接允许一个文件或目录可以同时存在于多个位置,而不会占用额外的磁盘空间。ln命令支持创建硬链接和软链接两种类型的链接。本文将详细介绍Linux中ln命令的用法、语法以及两种链接类......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-12-playwright操作iframe-中篇
    1.简介按照计划今天就要用实际的例子进行iframe自动化测试。经过宏哥长时间的查找,终于找到了一个含有iframe的网页(QQ邮箱和163邮箱),别的邮箱宏哥就没有细看了。所以今天这一篇的主要内容就是用这两个网页的iframe结合上一篇的理论知识,宏哥给小伙伴或者童鞋们演示一下。2.QQ邮箱2......
  • 软件测试 | 在Linux平台下安装MySQL
    在Linux平台下安装和Windows平台有所不同,不能用图形化的方式来安装,并且在Linux下支持3种安装方式:RPM包、二进制包、源码包。下面以RPM包为例来介绍如何在Linux平台下进行MySQL的安装,其他安装方式还会在本书第4篇的第24章中进行详细介绍。RPM是RedhatPackage......
  • 软件测试 | 在Windows平台安装MySQL
    Window平台下的安装包主要有两种,一种是noinstall包,顾名思义,不需要安装就可以直接使用;另一种是.zip安装包,可以通过图形化界面进行安装。下面分别就两种安装方式进行介绍。1.noinstall安装在Windows平台下安装MySQL,其安装步骤非常简单:将下载的文件mysq......