当前位置: 代码迷 >> 综合 >> c++读写配置文件(可复用)
  详细解决方案

c++读写配置文件(可复用)

热度:4   发布时间:2023-10-29 03:42:58.0

配置文件格式:

每一行有两种格式:

1. #注释

2. key   value #注释

例如:

#此文件是配置项文件,主要控制主程序的部分变量。
history 1  	#测试1
name 2
big 3		#测试2

解析逻辑:

1.以一行为单位,当遇到\n时将当前数据输出出来

2. 遇到#,直接将其数据输出出来,直接读到行某。

3. 利用falge 来区别Key和Value

代码如下:

复用时,可以创建结构体将结构体放入队列或其它结构中用于访问。

#include<conf.h>#define ConfName "conf.conf"void readConf(QueP* nowP){FILE* fp;char* nowLine;fp=fopen(ConfName,"r");char nowC;int flage=0;char nowKey[200];int keyIndex=0;char nowValue[200];int valueIndex=0;memset(nowKey,0x00,200);memset(nowValue,0x00,200);while((nowC=getc(fp))!=EOF){if(nowC==' '){continue;}if(nowC=='#'){while((nowC=getc(fp))!='\n'){continue;}if(strcmp(nowKey,"")){printf("nowKey is %s,nowValue is %s\n",nowKey,nowValue);}flage=0;memset(nowKey,0x00,200);keyIndex=0;memset(nowValue,0x00,200);valueIndex=0;continue;}if(nowC=='\n'){if(strcmp(nowKey,"")){printf("nowKey is %s,nowValue is %s\n",nowKey,nowValue);}flage=0;memset(nowKey,0x00,200);keyIndex=0;memset(nowValue,0x00,200);valueIndex=0;continue;}if(nowC!=' '&&flage==0){do{nowKey[keyIndex]=nowC;keyIndex+=1;}while((nowC=getc(fp))!=' ');flage+=1;continue;}if(nowC!=' '&&flage==1){nowValue[valueIndex]=nowC;valueIndex+=1;continue;}}
}

以上示例输出结果如下:

$ ./readCon.exe
nowKey is history,nowValue is 1
nowKey is name,nowValue is 2
nowKey is big,nowValue is 3