一个配置文件:在记事本 建立mycfg.ini的配置文件。内容如下:
接口设计:
建立cfg_op.h头文件,内容如下:
#ifndef __CFG_OP_H__
#define __CFG_OP_H__
#ifdef __cplusplus
extern "C" {
#endif
//获取配置项
int GetCfgItem(char *pFileName, char *pKey, char *pValue, int *pValueLen);
//写配置项
int WriteCfgItem(char *pFileName, char *pItemName, char *pItemValue, int itemValueLen);
#ifdef __cplusplus
}
#endif
#endif
模块设计
建立cfg_op.c源文件,内容如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include<stdio.h>
#define MaxLine 2048
//获取配置项
int GetCfgItem(char *pFileName, char *pKey, char *pValue, int *pValueLen)
{
int ret = 0;
FILE *fp = NULL;
char *pTmp = NULL, *pEnd = NULL, *pBegin = NULL;
char lineBuf[MaxLine];
fp = fopen(pFileName, "r");
if (fp == NULL)
{
ret = -1;
return ret;
}
while (!feof(fp)){
memset(lineBuf, 0, sizeof(lineBuf));
fgets(lineBuf, MaxLine, fp);
//printf("lineBuf:%s", lineBuf);
pTmp = strchr(lineBuf, '=');
if (pTmp == NULL)//没有=号
{
continue;
}
pTmp = strstr(lineBuf, pKey);
if (pTmp == NULL)//判断key是不是在//所在行是不是有key
{
continue;
}
pTmp = pTmp + strlen(pKey);//mykey1=myvalude1111111111==>"=myvalude1111111111"
pTmp = strchr(pTmp, '=');
if (pTmp == NULL)
{
continue;
}
pTmp = pTmp + 1;
//printf("pTmp:%s", pTmp);
//获取value起点
while (1)
{
if (*pTmp == ' ')
{
pTmp++;
}
else{
pBegin = pTmp;
if (*pBegin == '\n')
{
//没有配置value
//printf("配置项:%s没有配置value\n", pKey);
goto End;
}
break;
}
}
//获取valude结束点
while (1){
if ((*pTmp == ' ' || *pTmp == '\n'))
{
break;
}
else{
pTmp++;
}
}
pEnd = pTmp;
//赋值
*pValueLen = pEnd - pBegin;
memcpy(pValue, pBegin, pEnd - pBegin);
}
End:
if (fp == NULL){
fclose(fp);
}
return 0;
}
//写配置项
int WriteCfgItem(char *pFileName, char *pItemName, char *pItemValue, int itemValueLen)
{
return 0;
}
控制台界面设计:
建立
内容如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include<stdio.h>
#include"cfg_op.h"
#define CFGNAME "d:/mycfg.ini"
void mymenu()
{
printf("++++++++++++++++++++++++++\n");
printf("1测试写配置文件\n");
printf("2测试读配置文件\n");
printf("0退出\n");
printf("++++++++++++++++++++++++++\n");
}
//获取配置项
int TGetCfg()
{
int ret = 0;
char name[1024] = { 0 };
char valude[1024] = { 0 };
int vlen = 0;
printf("\n请键入key:");
scanf("%s", name);
ret = GetCfgItem(CFGNAME, name, valude, &vlen);
if (ret != 0)
{
printf("func GetCfgItem err:%d \n", ret);
return ret;
}
printf("valude:%s\n", valude);
return 0;
}
//写配置项
int TWriteCfg()
{
int ret = 0;
char name[1024] = { 0 };
char valude[1024] = { 0 };
printf("\n请键入key:");
scanf("%s", name);
ret = WriteCfgItem(CFGNAME, name, valude, strlen(valude));
if (ret != 0)
{
printf("func WriteCfgItem err:%d \n", ret);
return ret;
}
}
void main()
{
int choice;
mymenu();
for (;;)
{
//显示一个菜单
scanf("%d", &choice);
switch (choice)
{
case 1://写配置项
TWriteCfg();
break;
case 2://获取配置项
TGetCfg();
break;
case 0:
exit(0);
//default :;
//exit(0);
}
}
printf("++++++++++++++++++++++++++");
system("pause");
return;
}