前言

  • 自己常用的工具库, C++ 和C语言实现
  • 使用cmake维护的项目
  • 持续更新.....
  • 提供使用范例, 详见example文件夹
  • windows使用的VS通过了的编译。 Linux(Ubuntu)使用的是 clang++ 10.0
  • 欢迎留言交流

下载地址

giteegithub

文件读写接口


/// ----------------------------------------------------------------------------------------
/// 文件读写接口
/// ----------------------------------------------------------------------------------------
class ifile
{
public: /// --------------------------------------------------------------------------------
/// @brief: 初始化
/// @str_file - 文件所在绝对路径, 例如: C:/demo/logs/1.txt
/// @open_mode - 以哪种方式打开文件
/// @return - int
/// 0 - 成功
/// 1 - 失败, 参数【str_file】字符串为空
/// 2 - 失败,参数【open_mode】不是给定的枚举范围
/// 3 - 失败,文件打开失败。
/// --------------------------------------------------------------------------------
virtual int init_(const std::string& str_file, const oct_toolkits::en_file_open_mode open_mode) = 0; /// --------------------------------------------------------------------------------
/// 返回当前初始化的文件
/// @return - std::string
///
/// --------------------------------------------------------------------------------
virtual std::string file_() = 0; /// --------------------------------------------------------------------------------
/// 文件是否打开
/// @return - bool
/// true - 打开
/// false - 没有打开
/// --------------------------------------------------------------------------------
virtual bool is_opened_() = 0; /// --------------------------------------------------------------------------------
/// 返回文件长度,单位: 字节
/// @return - int
/// 返回值X,
/// -2 - 失败,请先执行初始化
/// X >=0 , 文件长度,单位:字节
/// --------------------------------------------------------------------------------
virtual int length_() = 0; /// --------------------------------------------------------------------------------
/// 写文件, 将数据写入
/// @pbuf - 待写入内容
/// @pbuf_len - 待写入数据长度
/// @return - int
/// 0 - 成功
/// 1 - 失败,请先初始化
/// 2 - 失败,参数【pbuf】为nullptr或者NULL
/// 3 - 失败,写文件失败
/// --------------------------------------------------------------------------------
virtual int write_(const char* pbuf, unsigned int pbuf_len) = 0;
/// --------------------------------------------------------------------------------
/// 写文件
/// @str_write - 待文件内容
/// @return - int
/// 0 - 成功
/// 1 - 失败,请先初始化
/// 2 - 失败,参数【str_write】的长度为0
/// 3 - 失败,写文件失败
/// --------------------------------------------------------------------------------
virtual int write_(const std::string& str_write) = 0; /// --------------------------------------------------------------------------------
/// 将文件内容儒道参数【str_read】中
/// @str_read - 返回文件内容
/// @return - int
/// 0 - 成功
/// 1 - 失败,请先初始化
/// 2 - 失败,读取文件缓冲创建失败
/// 3 - 失败,读取文件失败
/// --------------------------------------------------------------------------------
virtual int read_(std::string& str_read) = 0; /// --------------------------------------------------------------------------------
/// 读文件内容, 参数【pout_buf】需要外部申请,函数内不会维护,读取成功后,文件内容存放在pout_buf中。
/// @pout_buf - 返回读取文件内容
/// @pout_buf_len - 【pout_buf】缓冲区的长度
/// @return - int
/// 0 - 成功
/// 1 - 失败,请先初始化
/// 2 - 失败,参数【pout_buf】为空 或者 参数【pout_buf_len】的值是0
/// --------------------------------------------------------------------------------
virtual int read_(char* pout_buf, unsigned int pout_buf_len) = 0; /// --------------------------------------------------------------------------------
/// 判断参数【str_check_file】的文件是否存在
/// @str_check_file -
/// @return - bool
///
/// --------------------------------------------------------------------------------
virtual bool is_existed_(const std::string& str_check_file) = 0; /// --------------------------------------------------------------------------------
/// 避免析构时出现异常,请销毁前先调用该函数完成内部资源释放
/// @return - int
/// 0 - 成功
/// --------------------------------------------------------------------------------
virtual int uninit_() = 0;
};

日志库接口

	/// ----------------------------------------------------------------------------------------
/// 日志文件接口类
/// ----------------------------------------------------------------------------------------
class ilog
{
public:
/// --------------------------------------------------------------------------------
/// 初始化,
/// @info - 日志信息
/// @return - int
/// 0 - 成功
/// 1 - 失败,日志文件路径不正确
/// 2 - 失败,如果磁盘空间剩余不够,则禁止创建日志文件对象
/// 3 - 失败,无法创建日志文件路径, 无法写入日志
/// 5 - 失败,创建日志文件失败,则无法写入日志
/// --------------------------------------------------------------------------------
virtual int init_(const oct_toolkits::st_log_info& info) = 0; /// --------------------------------------------------------------------------------
/// 写日志,日志内容为文本,且每一行前面都带有时间; 例如: [2021-03-28 15:00:00:001] 日志文件内容
/// @str_log - 待写入日志文件内容
/// @return - int
/// 0 - 成功
/// 1 - 无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
/// 2 - 失败,无法创建写日志文件对象,请先初始化
/// --------------------------------------------------------------------------------
virtual int log_text_(const std::string& str_log) = 0; /// --------------------------------------------------------------------------------
/// 写日志
/// @pdata - 待写入内容
/// @pdata_len - 待写入长度
/// @return - int
/// 0 - 成功、
/// 1 - 失败,参数【pdata】为空或者参数【pdata_len】为0
/// 2 - 失败,无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
/// 3 - 失败,无法写入,日志文件读写对象创建失败,请先初始化
/// --------------------------------------------------------------------------------
virtual int log_text_(const char* pdata, unsigned int pdata_len) = 0; /// --------------------------------------------------------------------------------
/// 将参数【str_log】每个字节的16进制写入文件,全部大写
/// @str_log - 待写入内容
/// @return - int
/// 0 - 成功
/// 1 - 无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
/// 2 - 失败,无法写入,日志文件读写对象创建失败,请先初始化
/// --------------------------------------------------------------------------------
virtual int log_hex_(const std::string& str_log) = 0; /// --------------------------------------------------------------------------------
/// 将参数【pdata】每个字节的16进制写入文件,全部大写
/// @pdata - 待写入内容
/// @pdata_len - 写入内容长度
/// @return - int
/// 0 - 成功
/// 1 - 失败,参数【pdata】为空或者参数【pdata_len】为0
/// 2 - 失败,无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
/// 3 - 失败,无法写入,日志文件读写对象创建失败,请先初始化
/// --------------------------------------------------------------------------------
virtual int log_hex_(const char* pdata, unsigned int pdata_len) = 0; /// --------------------------------------------------------------------------------
/// 释放内部资源
/// @return - void
///
/// --------------------------------------------------------------------------------
virtual void uninit_() = 0;
};

其他常用接口

	/// ----------------------------------------------------------------------------------------
/// 常用工具
/// ----------------------------------------------------------------------------------------
class lib_toolkits_api toolkits
{
public:
explicit toolkits();
virtual ~toolkits(); /// --------------------------------------------------------------------------------
/// 返回年月日时分秒毫秒字符串
/// @return - std::string
///
/// --------------------------------------------------------------------------------
st_now_date get_date_now_(); /// --------------------------------------------------------------------------------
/// 格式化字符串
/// @pformat - 格式化字符串
/// @ - 参数列表
/// @return - std::string
/// 返回格式化结果
/// --------------------------------------------------------------------------------
std::string str_format_(const char*pformat, ...); /// --------------------------------------------------------------------------------
/// 获取可执行程序所在绝对路径
/// @return - std::string
///
/// --------------------------------------------------------------------------------
std::string get_executable_dir_(); /// -----------------------------------------------------------------
/// windows特有的转码函数, 如果是非Windows平台调用,则返回空的字符串
/// ----------------------------------------------------------------- /// --------------------------------------------------------------------------------
/// @brief: utf8字符串转ascii
/// @param: const std::string & str_utf8 - utf8字符串编码
/// @return: std::string
/// ascii字符串编码
/// --------------------------------------------------------------------------------
std::string utf8_to_ascii_(const std::string& str_utf8); /// --------------------------------------------------------------------------------
/// @brief: ascii字符编码转utf8字符串
/// @param: const std::string & str_acsii - acsii编码字符串
/// @return: std::string
/// utf8字符串
/// --------------------------------------------------------------------------------
std::string acsii_to_utf8_(const std::string& str_acsii); private:
/// 屏蔽拷贝构造函数
toolkits(const toolkits& instance) {}
toolkits& operator =(const toolkits& instance) { return *this; }
};

C++常用工具库(C语言文件读写,日志库,格式化字符串, 获取可执行文件所在绝对路径等)的更多相关文章

  1. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

  2. 3,C语言文件读写

    这两天看到一个关于文件读写的题目,索性就把相关内容总结下. C语言文件读写,无非是几个读写函数的应用,fopen(),fread(),fwrite()等,下面简单介绍下. 一.fopen() 函数原型 ...

  3. C语言文件读写命令fprintf和fscanf

    以向文件中读取和写入二维数组为例. 以下是fprintf的使用:向文件中写入10*10的二维数组,数组元素为1~100之间的随机数. #include <stdlib.h> #includ ...

  4. swift调用oc语言文件,第三方库文件或者自己创建的oc文件——简书作者

    Swift是怎样调用OC的第三方库的呢?请看下面详情: 情况一: 1.首先打开Xcode,iOS->Application->Single View Application, 选Next. ...

  5. [知识复习] C语言文件读写

    文件打开 fopen() 返回FILE* 对象,如果打开失败返回NULL,错误代码存入errno中 FILE *fopen( const char * filename, const char * m ...

  6. C语言文件读写操作

    C语言实现文件读写,注意区分几个方法: 写入: fwrite() //个人认为这个最好,可是实现写入任何数据类型,任何长度 fputs() //写入一个字符串,字符串长度不能太长,具体的长度未知,但估 ...

  7. 一、Git的一些命令操作----创建版本库、增加文件到Git库、时光机穿梭、远程仓库

    具体详细教程请链接:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 我这里只是记录 ...

  8. Go语言系列之日志库zap

    在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 能够将事件记录到文件中,而不是应用程序控制台. 日志切割-能够根据文件大小.时间或间隔等来切割日志文件. 支持不同的日志级别.例 ...

  9. C++标准库实现WAV文件读写

    在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依赖于其他的库. WAV文件结构 ...

随机推荐

  1. CF1156F Card Bag

    题目传送门. 题意简述:有 \(n\) 张卡牌,每张卡牌有数字 \(a_1,a_2,\cdots,a_n\).现在随机抽取卡牌,不放回,设本次抽到的卡牌为 \(x\),上次抽到的卡牌为 \(y\),若 ...

  2. fluidity详解

    fluidity详解 1.fluidity编译过程 1.1.femtools库调用方法 编译fluidity/femtools目录下所有文件,打包为libfemtools.a静态库文件: 通过-lfe ...

  3. Go知识点大纲

    目录 1. 基本介绍 2. 安装及配置 3. 变量 4. 常量 5. 数据类型 5.1 numeric(数字) 5.2 string(字符串) 5.3 array(数组) 5.4 slice(切片) ...

  4. 爬虫动态渲染页面爬取之selenium驱动chrome浏览器的使用

    Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,可以用其进行网页动态渲染页面的爬取. 支持的浏览器包括IE(7, 8, 9, 10 ...

  5. Oracle-oracle中union和union all的区别

    union和union all的区别Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序:Union All:对两个结果集进行并集操作,包括重复行,不进行排序: union和un ...

  6. Netty | 第1章 Java NIO 网络编程《Netty In Action》

    目录 前言 1. Java 网络编程 1.1 Javs NIO 基本介绍 1.2 缓冲区 Buffer 1.2 通道 Channel 1.3 选择器 Selector 1.4 NIO 非阻塞网络编程原 ...

  7. C语言中储存的大小端问题

    一.大小端定义 研究变量的高低字节:从左往右看,字节序递增,也就是最右边是最低字节,最右边是最高字节.如 int i = 0x01020304, 01是高字节,04是低字节.如果是字符串如char a ...

  8. linux 实用指令时间日期类

    linux 使用指令时间日期类 data 显示当前日期 基本语法 date 显示当前时间 date+%Y 显示当前年份 date+%m 显示当前月份 date+%d 显示当前是哪一天 date &qu ...

  9. Centos7部署RabbitMQ的镜像队列集群

    一.背景 在上一章节中,我们学会了如何搭建一个单节点的RabbitMQ服务器,但是单节点的RabbitMQ不可靠,如果单节点挂掉,则会导致消息队列不可用.此处我们搭建一个3个节点的RabbitMQ集群 ...

  10. 多人协作解决方案,git flow的使用

    简介 Gitflow工作流程围绕项目发布定义了严格的分支模型. 为不同的分支分配了非常明确的角色,并且定义了使用场景和用法.除了用于功能开发的分支,它还使用独立的分支进行发布前的准备.记录以及后期维护 ...