You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

320 lines
13 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*********************************************************************
*文件说明: 配置文件库
*作者: logos
*日期: 2018/09/01
*修改日志: 2018/09/01 logos 从comm剥离
***********************************************************************/
#pragma once
#ifndef DLL_INCLUDE_CONFIG_H
#define DLL_INCLUDE_CONFIG_H
#ifndef EXPORT_C
#define EXPORT_C extern "C"
#endif
#ifndef WINAPI
#define WINAPI __stdcall
#endif
#ifndef MAX_NAME_LEN
#define MAX_NAME_LEN 32
#endif
#ifndef KEY_LEN
#define KEY_LEN 128 //字段长度
#endif
struct TConfig
{//配置项列表
char key[KEY_LEN]; //段落名
char name[KEY_LEN]; //配置项名
};
/****************************************************
*Function: 初始化配置模块
*Intput: NULL
*Output: NULL
*Return: 成功返回0 ,失败返回错误码
******************************************************/
EXPORT_C int WINAPI cfg_init();
/****************************************************
*Function: 关闭配置模块
*Intput: NULL
*Output: NULL
*Return: 成功返回0失败返回错误码
******************************************************/
EXPORT_C int WINAPI cfg_deinit();
/****************************************************
*Function: 获取当前日志保存目录
*Intput: NULL
*Output: NULL
*Return: 成功返回日志保存目录<256字节失败返回NULL
*PS: 除非严重错误,否则不可能失败,默认返回当前目录
*PS: 该配置保存在系统配置文件
******************************************************/
EXPORT_C const char* WINAPI get_log_path();
/****************************************************
*Function: 获取当前日志保存目录
*Intput: NULL
*Output: path 当前日志保存目录 保证256字节
*Return: 成功返回0 失败返回错误码
*PS: 该配置保存在系统配置文件
******************************************************/
EXPORT_C int WINAPI get_log_paths(char* path);
/****************************************************
*Function: 设置当前日志保存目录
*Intput: path 待设置目录 <256字节
*Output: NULL
*Return: 成功返回日志保存目录失败返回NULL
*PS: 必须保证该目录是存在的,否则设置会失败
*PS: 该配置保存在系统配置文件
******************************************************/
EXPORT_C int WINAPI set_log_path(const char* path);
/****************************************************
*Function: 加载项目配置
*Intput: file 配置文件目录 <256字节
*Output: NULL
*Return: 成功返回0失败返回错误码
*PS: 项目配置默认是空,需要手动加载
*PS: 若不传入文件路径,则使用上一次的路径加载
******************************************************/
EXPORT_C int WINAPI cfg_load(const char* file = 0);
/****************************************************
*Function: 增加/修改一个配置项 -- 项目配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
lpValue 值 ?=xxx <256字节
*Output: NULL
*Return: 成功返回0失败返回错误码
******************************************************/
EXPORT_C int WINAPI modify_cfg(const char* key, const char* name, const char* lpValue);
/****************************************************
*Function: 获取一个配置项 -- 项目配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
*Output: NULL
*Return: 成功返回读取到的值<256字节失败返回NULL
******************************************************/
EXPORT_C const char* WINAPI get_cfg(const char* key, const char* name);
/****************************************************
*Function: 获取一个配置项 -- 项目配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
*Output: pval 配置值 -- 保证传入256个字节
*Return: 成功返回0失败返回错误码
******************************************************/
EXPORT_C int WINAPI get_cfgs(const char* key, const char* name, char* pval);
/****************************************************
*Function: 增加/修改一个配置项(int型) -- 项目配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
iValue 值 ?=xxx (int)
*Output: NULL
*Return: 成功返回0失败返回错误码
******************************************************/
EXPORT_C int WINAPI modify_cfg_int(const char* key, const char* name, int iValue);
/****************************************************
*Function: 获取一个配置项(int型) -- 项目配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
*Output: NULL
*Return: 成功返回读取到的值(int)失败返回0
******************************************************/
EXPORT_C int WINAPI get_cfg_int(const char* key, const char* name);
/****************************************************
*Function: 增加/修改一个配置项(double型) -- 项目配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
dValue 值 ?=xxx (double)
*Output: NULL
*Return: 成功返回0失败返回错误码
******************************************************/
EXPORT_C int WINAPI modify_cfg_double(const char* key, const char* name, double dValue);
/****************************************************
*Function: 获取一个配置项(double型) -- 项目配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
*Output: NULL
*Return: 成功返回读取到的值(double)失败返回0
******************************************************/
EXPORT_C double WINAPI get_cfg_double(const char* key, const char* name);
/****************************************************
*Function: 保存配置到文件 -- 包含项目配置和系统配置
*Intput: NULL
*Output: NULL
*Return: 成功返回0,失败返回错误码< 0
*PS: 仅修改后才会保存到文件
******************************************************/
EXPORT_C int WINAPI save_cfg_file();
/****************************************************
*Function: 获取项目配置所有配置项 -- 系统配置不支持
*Intput: plist 配置项内容
nsize 缓冲区大小
*Output: plist 配置项内容
*Return: 返回获取到的配置项数量
*PS: 可以先传入NULL获取大小,保证缓冲区够大后再获取数据
******************************************************/
EXPORT_C int WINAPI get_cfg_list(TConfig* plist = 0, int nsize = 0);
/****************************************************
*Function: 把一字符串写入一文件,首次写入会打开文件,如果文件存在,
则打开并移到最后,若不存在,则创建并打开。反初始化时会自动关闭
*Intput: file 文件名/相对路径 <128字节
msgFormat 字符串格式与printf用法相同
后面可加N个参数最大支持1024个字节
*Output: 无
*Return: 成功返回0失败返回错误码
*PS: 基于日志配置目录读写
*PS: 此接口需要外部写入换行符
*PS: 假设日志目录为:"D:\\log" 传入file: "123.dat"
则实际写入文件目录为"D:\\log\\123.dat"
******************************************************/
EXPORT_C int WINAPI files_write(const char* file, const char *pszFormat, ...);
/****************************************************
*Function: 与files_write功能类似 -- 不支持格式化写入,不限制单次写入长度
*Intput: file 文件名 <128字节
pszContent 要写入的内容
npos 可选参数,默认-1为从文件结尾写入
*Output: 无
*Return: 成功返回0失败返回错误码
*PS: 基于日志配置目录读写
*PS: 此接口需要外部写入换行符
******************************************************/
EXPORT_C int WINAPI files_writes(const char* file, const char *pszContent, int npos = -1);
/****************************************************
*Function: 逐行读取文件内容可以传NULL获取文件大小
*Intput: file 文件名/相对路径 <128字节
pszContent 要读取的内容缓冲区,必须外部保证缓冲区大小
nline 可选参数,读取第几行,从0开始默认-1为从当前位置读取
*Output: 无
*Return: 成功返回读取到的字节大小,失败返回错误码<0文件结尾返回0
*PS: 基于日志配置目录读写
*PS: 若不传入pszContent 则返回该文件大小,但不会实际读取
*PS: 打开文件后,默认游标会在文件开始
*PS: 此接口会自动过滤换行符
*PS: nline<0时从当前位置读取并移动游标到读取后
*PS: nline>=0时从指定行开始读取并移动游标到读取后
******************************************************/
EXPORT_C int WINAPI files_read(const char* file, char *pszContent = 0, int nline = -1);
/****************************************************
*Function: 关闭并保存一个已经打开的文件
*Intput: file 文件名/相对路径 <128字节
*Output: NULL
*Return: 成功返回0失败返回错误码
*PS: 基于日志配置目录读写
*PS: file 传NULL时关闭所有文件
******************************************************/
EXPORT_C int WINAPI files_close(const char* file = 0);
/****************************************************
*Function: 保存一个已经打开的文件到硬盘,不关闭
*Intput: file 文件名/相对路径 基于日志目录下创建 <128字节
newname 新文件名,若指定,则会另存一个拷贝 <128字节
*Output: NULL
*Return: 成功返回0失败返回错误码
*PS: 基于日志配置目录读写
******************************************************/
EXPORT_C int WINAPI files_save(const char* file, const char* newname = 0);
/****************************************************
*Function: 获取所有已经打开的文件名(路径),以'/0'(0结束符)隔开
*Intput: pszFileList 文件名/相对路径 缓冲区
*Output: NULL
*Return: 若不存在文件名(路径)返回0,否则返回所有文件名总长度
*PS: 每个文件名总长度包含文件名实际长度+1(0结束符)
*PS: 基于日志配置目录读写
******************************************************/
EXPORT_C int WINAPI files_get_list(char* pszFileList = 0);
/****************************************************
*Function: 增加/修改一个系统配置项 -- 系统配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
lpValue 值 ?=xxx <256字节
*Output: NULL
*Return: 成功返回0失败返回错误码
*PS: 基于系统配置目录 //data//sys.cfg
******************************************************/
EXPORT_C int WINAPI modify_sys_cfg(const char* key, const char* name, const char* lpValue);
/****************************************************
*Function: 获取一个系统配置项 -- 系统配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
*Output: NULL
*Return: 成功返回读取到的值 <256字节失败返回NULL
*PS: 基于系统配置目录 //data//sys.cfg
******************************************************/
EXPORT_C const char* WINAPI get_sys_cfg(const char* key, const char* name);
/****************************************************
*Function: 获取一个系统配置项 -- 系统配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
*Output: pval 配置值 -- 保证传入256个字节
*Return: 成功返回0失败返回错误码
*PS: 基于系统配置目录 //data//sys.cfg
******************************************************/
EXPORT_C int WINAPI get_sys_cfgs(const char* key, const char* name, char* pval);
/****************************************************
*Function: 增加/修改一个配置项(int型) -- 系统配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
iValue 值 ?=xxx (int)
*Output: NULL
*Return: 成功返回0失败返回错误码
*PS: 基于系统配置目录 //data//sys.cfg
******************************************************/
EXPORT_C int WINAPI modify_sys_cfg_int(const char* key, const char* name, int iValue);
/****************************************************
*Function: 获取一个配置项(int型) -- 系统配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
*Output: NULL
*Return: 成功返回读取到的值(int)失败返回0
*PS: 基于系统配置目录 //data//sys.cfg
******************************************************/
EXPORT_C int WINAPI get_sys_cfg_int(const char* key, const char* name);
/****************************************************
*Function: 增加/修改一个配置项(double型) -- 系统配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
dValue 值 ?=xxx (double)
*Output: NULL
*Return: 成功返回0失败返回错误码
*PS: 基于系统配置目录 //data//sys.cfg
******************************************************/
EXPORT_C int WINAPI modify_sys_cfg_double(const char* key, const char* name, double dValue);
/****************************************************
*Function: 获取一个配置项(double型) -- 系统配置
*Intput: key 段落名 [xxx] -- 不能包含'/' <32字节
name 关键字 xxx=? <32字节
*Output: NULL
*Return: 成功返回读取到的值(double)失败返回0
*PS: 基于系统配置目录 //data//sys.cfg
******************************************************/
EXPORT_C double WINAPI get_sys_cfg_double(const char* key, const char* name);
#endif //防止重复包含头文件