前言

  • 自己常用的工具库, 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. 【Perl示例】整合多个文件

    这个需求是在生信分析中几乎天天用到,各种语言都能实现,也都各有特点.这次以perl为例. 已知 文件CT-VS-CON.All.xls为全部蛋白表达矩阵及其差异分析结果. 文件Homo_sapiens ...

  2. 【7】基于NGS检测体系变异解读和数据库介绍

    目录 解读相关专业术语 体系变异解读规则 体系变异和用药解读流程 主要数据库介绍 解读相关专业术语 2个概念:胚系.体系突变 4种变异类型:SNV.Indel.融合/SV(大的易位/倒位/缺失).CN ...

  3. snakmake 小练习

    最近在学习snakemake 用于生信流程管理,现在用一个snakemake 来完成小任务:将在某一文件夹下的多个bam文件截取一部分,然后建立索引,在提取出fastq序列,最后比对回基因组. 需要两 ...

  4. EXCEL如何用公式提取一列中的唯一值和不重复值

    说明:思路用的很新奇,也对COUNTIF有了更深一步的了解,但是,对于百行数据运算速度特别低,不适合数据多的使用 当面对一堆数据,我们要提取一列的唯一值的时候,如果单纯用人为一个个判断,显然是不科学的 ...

  5. 半天做完的数据报表,YonBuilder只要十几分钟,0代码开发

    进入数字化时代,拍脑袋的决策方式显然不靠谱,一切要靠数据说话.与信息化时代相比,数字化时代的企业对数据的应用更广泛.更深入.为了应对激烈的市场竞争,企业经营决策者们对数据的依赖度越来越高,企业各个业务 ...

  6. Netty之Channel*

    Netty之Channel* 本文内容主要参考**<<Netty In Action>> ** 和Netty的文档和源码,偏笔记向. 先简略了解一下ChannelPipelin ...

  7. Kafka入门教程(一)

    转自:https://blog.csdn.net/yuan_xw/article/details/51210954 1 Kafka入门教程 1.1 消息队列(Message Queue) Messag ...

  8. flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习

    1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...

  9. 大数据学习day15----第三阶段----scala03--------1.函数(“_”的使用, 函数和方法的区别)2. 数组和集合常用的方法(迭代器,并行集合) 3. 深度理解函数 4 练习(用java实现类似Scala函数式编程的功能(不能使用Lambda表达式))

    1. 函数 函数就是一个非常灵活的运算逻辑,可以灵活的将函数传入方法中,前提是方法中接收的是类型一致的函数类型 函数式编程的好处:想要做什么就调用相应的方法(fliter.map.groupBy.so ...

  10. nodejs-Cluster模块

    JavaScript 标准参考教程(alpha) 草稿二:Node.js Cluster模块 GitHub TOP Cluster模块 来自<JavaScript 标准参考教程(alpha)&g ...