【C/C++19】_public.h,_public.cpp,_cmpublic.h
发布日期:2021-04-30 21:02:07 浏览次数:136 分类:精选文章

本文共 8245 字,大约阅读时间需要 27 分钟。

C语言高级编程参考手册

1. 公共头文件

1.1 _public.h

#ifndef _PUBLIC_H#define _PUBLIC_H#include "_cmpublic.h"// 文件信息结构体struct st_fileinfo {    char filename[301];    int filesize;    char mtime[21];};// 目录类class CDir {public:    char m_DirName[301];    char m_FileName[301];    char m_FullFileName[301];    int m_FileSize;    char m_ModifyTime[21];    char m_CreateTime[21];    char m_AccessTime[21];    int m_uPOS;    vector
m_vFileName; CDir(); void initdata(); void SetDateFMT(const char* in_DateFMT); // 打开目录 bool OpenDir(const char* in_DirName, const char* in_MatchStr, unsigned int in_MaxCount = 10000, bool bAndChild = false, bool bSort = false); // 递归打开目录 bool _OpenDir(const char* in_DirName, const char* in_MatchStr, unsigned int in_MaxCount, bool bAndChild); // 逐个读取目录中的文件信息 bool ReadDir(); // 获取文件信息 ~CDir();};// 文件操作类class CFile {private: FILE* m_fp; bool m_bEnBuffer; char m_filename[301]; char m_filenametmp[301];public: CFile(); ~CFile(); bool IsOpened(); bool Open(const char* filename, const char* openmode, bool bEnBuffer = true); bool CloseAndRemove(); bool OpenForRename(const char* filename, const char* openmode, bool bEnBuffer = true); bool CloseAndRename(); void Fprintf(const char* fmt, ...); bool Fgets(char* strBuffer, const int ReadSize, bool bDelCRT = false); bool FFGETS(const FILE* fp, char* strBuffer, const int ReadSize, const char* strEndStr = 0); size_t Fread(void* ptr, size_t size); size_t Fwrite(const void* ptr, size_t size); ~CFile();};// 字符串操作类class CCmdStr {public: vector
m_vCmdStr; CCmdStr(); void SplitToCmd(const string in_string, const char* in_sep, bool bdeletespace = true); int CmdCount(); bool GetValue(const int inum, char* in_return); bool GetValue(const int inum, char* in_return, const int in_len); bool GetValue(const int inum, int* in_return); bool GetValue(const int inum, long* in_return); bool GetValue(const int inum, double* in_return); ~CCmdStr();};// 时间操作类class CTimer {public: struct timeval m_start; struct timeval m_end; CTimer(); void Start(); double Elapsed();};// 日志文件操作类class CLogFile {public: FILE* m_tracefp; char m_filename[301]; char m_openmode[11]; bool m_bBackup; bool m_bEnBuffer; CLogFile(); ~CLogFile(); bool Open(const char* in_filename, const char* in_openmode, bool bBackup = true, bool bEnBuffer = false); bool BackupLogFile(); bool Write(const char* fmt, ...); bool WriteEx(const char* fmt, ...); void Close();};// XML操作类class CXmlBuffer {public: bool GetXmlBuffer(const char* in_xmlBuffer, const char* in_fieldName, char* out_value, const int in_len = 0); bool GetXmlBuffer(const char* in_xmlBuffer, const char* in_fieldName, bool* out_value); bool GetXmlBuffer(const char* in_xmlBuffer, const char* in_fieldName, int* out_value); bool GetXmlBuffer(const char* in_xmlBuffer, const char* in_fieldName, unsigned int* out_value); bool GetXmlBuffer(const char* in_xmlBuffer, const char* in_fieldName, long* out_value); bool GetXmlBuffer(const char* in_xmlBuffer, const char* in_fieldName, unsigned long* out_value); bool GetXmlBuffer(const char* in_xmlBuffer, const char* in_fieldName, double* out_value);};// 网络通信类class CTcpClient {public: int m_sockfd; char m_ip[21]; int m_port; bool m_btimeout; int m_buflen; CTcpClient(); bool ConnectToServer(const char* ip, int port); bool Read(char* buffer, const int itimeout = 0); bool Write(const char* buffer, const int ibuflen = 0); void Close();};// TCP服务器类class CTcpServer {public: int m_listenfd; int m_connfd; bool m_btimeout; int m_buflen; CTcpServer(); bool InitServer(unsigned int port); bool Accept(); char* GetIP(); bool Read(char* buffer, const int itimeout = 0); bool Write(const char* buffer, const int ibuflen = 0); void CloseListen(); void CloseClient();};// 其他常用函数#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#endif

2. _public.cpp

#include "_public.h"// 常用函数实现int SNPRINTF(char* str, size_t size, const char* fmt, ...) {    memset(str, 0, size + 1);    va_list arg;    va_start(arg, fmt);    vsnprintf(str, size, fmt, arg);    va_end(arg);}char* STRCPY(char* dest, const size_t destlen, const char* src) {    if (strlen(src) > destlen) {        strncpy(dest, src, destlen);    } else {        strcpy(dest, src);    }    return dest;}char* STRNCPY(char* dest, const size_t destlen, const char* src, size_t n) {    if (n > destlen) {        strncpy(dest, src, destlen);    } else {        strncpy(dest, src, n);    }    return dest;}char* STRCAT(char* dest, const size_t destlen, const char* src) {    if (strlen(dest) >= destlen) {        memset(dest + strlen(dest), 0, destlen - strlen(dest) + 1);    }    int left = destlen - strlen(dest);    int len = (strlen(src) > left) ? left : strlen(src);    strncat(dest, src, len);    return dest;}char* STRNCAT(char* dest, const size_t destlen, const char* src, size_t n) {    int left = destlen - strlen(dest);    int len = (n > left) ? left : n;    strncat(dest, src, len);    return dest;}// 时间转换函数int timetostr(const time_t ti, char* strtime) {    struct tm* sttm;    if ((sttm = localtime(&ti)) == 0) {        return -1;    }    sprintf(strtime, "%d-%02d-%02d %02d:%02d:%02d",           sttm->tm_year + 1900, sttm->tm_mon + 1, sttm->tm_mday,           sttm->tm_hour, sttm->tm_min, sttm->tm_sec);    return 0;}int strtotime(const char* strtime, time_t* ti) {    char temp[11];    strncpy(temp, strtime, 4);    sttm.tm_year = atoi(temp) - 1900;    strncpy(temp, strtime + 5, 2);    sttm.tm_mon = atoi(temp) - 1;    strncpy(temp, strtime + 8, 2);    sttm.tm_mday = atoi(temp);    strncpy(temp, strtime + 11, 2);    sttm.tm_hour = atoi(temp);    strncpy(temp, strtime + 14, 2);    sttm.tm_min = atoi(temp);    strncpy(temp, strtime + 17, 2);    sttm.tm_sec = atoi(temp);    *ti = mktime(&sttm);    return *ti;}// 文件操作bool CFile::IsOpened() {    return m_fp != 0;}bool CFile::Close() {    if (m_fp == 0) return;    fclose(m_fp);    m_fp = 0;    if (!m_filenametmp.empty()) {        remove(m_filenametmp);    }    memset(m_filename, 0, sizeof(m_filename));    memset(m_filenametmp, 0, sizeof(m_filenametmp));}bool CFile::CloseAndRemove() {    if (m_fp == 0) return true;    fclose(m_fp);    m_fp = 0;    if (remove(m_filename) != 0) {        memset(m_filename, 0, sizeof(m_filename));        return false;    }    memset(m_filename, 0, sizeof(m_filename));    return true;}bool CFile::Open(const char* filename, const char* openmode, bool bEnBuffer) {    Close();    m_fp = fopen(filename, openmode);    if (m_fp == 0) return false;    m_bEnBuffer = bEnBuffer;    strncpy(m_filename, filename, 300);    return true;}// 其他类和函数可在此扩展

3. _cmpublic.h

#ifndef _cmpublic_H#define _cmpublic_H#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// 定义 bool 数据类型#ifndef BOOL#define BOOL unsigned char#endif#ifndef bool#define bool unsigned char#endif#ifndef TRUE#define TRUE 1#endif#ifndef true#define true 1#endif#ifndef FALSE#define FALSE 0#endif#ifndef false#define false 0#endif// 其他标准库#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#endif

以上为代码中的一部分,完整的代码库包含了大量功能性类和常用函数的实现,可根据实际需求进行扩展和修改。

上一篇:springboot 打包可运行jar配置(记录)
下一篇:Java中的异常触发都是通过throw主动抛出

发表评论

最新留言

感谢大佬
[***.8.128.20]2026年05月30日 23时50分19秒