对配置文件的解析及重构

本程序是为了解决对配置文件是否发生改变所做的修改,用计算文件的digest方法来判断文件是否发生变化

若要想文件中有一个配置项的改变,不影响到文件的digest的变化,那就可以用如下方法把文件重新解析和组合一下,得到一个新的配置文件

(新的配置文件不含有需要去掉配置项,可以用别的方法来保存起来)

代码如下:

#include<stdio.h>
#include<string.h>

#define MAX_STRING_LEN 32*1024
char contractUrl[200] = {0};

/*function:传入一个文件buf, 查找指定的字符串,然后在重新组合新的文件,放入newBuf当中*/
long int getNewConfigFile(char *buf, char *searchBuf, char *newBuf)
{
char *pUrl;
char *pEnd;
char *pConfig;
pConfig = buf;
pUrl = strstr(buf, searchBuf);/*严格匹配查找指定字符串*/
if (NULL != pUrl)
{
memcpy(newBuf, buf, pUrl-pConfig);/*保存下查找字符中的前部分内容*/
pUrl += strlen(searchBuf);
pEnd = strstr(pUrl, "\r\n");
if (pEnd!=NULL)
{
*pEnd='\0';
memcpy(contractUrl, pUrl, pEnd-pUrl);
contractUrl[pEnd-pUrl] = '\0';
}	

printf("\n****the contract url = %s****\nlen=%d\n", contractUrl, strlen(contractUrl));
pUrl = pEnd+1;
//printf("the url afer:\n%s",pUrl);
strcat(newBuf, pUrl); /*保存查找字符串之后的内容*/
}
printf("\n\nthe new config:\n%s", newBuf);
return strlen(newBuf);
}
void saveFile(char *fileName,char *str)
{
FILE *fileFd = 0;
fileFd = fopen(fileName, "wb+");
if(fileFd > 0)
{
fwrite(str,strlen(str),1,fileFd);
fseek(fileFd,SEEK_SET,0);
}
else
{
printf("Open and save the file is failed!\n");
exit(1);
}
fclose(fileFd);
}
void readFile(char *fileName,char *str)
{
FILE *fileFd = 0;
char tmpStr[32*1024]={0};
fileFd = fopen(fileName, "rb");
if(fileFd > 0)
{
fread(tmpStr,sizeof(tmpStr),1,fileFd);
//fseek(fileFd,0,SEEK_SET);
strcpy(str,tmpStr);
printf("read file value:\n%s\n",str);
}
else
{
printf("Open the file is failed!\n");
exit(1);
}
fclose(fileFd);
}

int main(int argc, char *argv[])
{
char newconfig[33*1024];
long int fileLen = 0;
char fileName[32]={0};
char tmp[MAX_STRING_LEN]={0};
readFile("test.txt",tmp);
fileLen = getNewConfigFile(tmp, "Auto Pbook Url :", newconfig);
//printf("\nthe new config\n%s\nlen=%d\n",newconfig,fileLen);
saveFile("test.txt",newconfig);
return 1;
}


t测试用到的test.txt配置文件格式有如:

<GLOBAL CONFIG MODULE>
Default UI         :1
Use Vendor Class ID:0
Vendor Class ID    :IP PHONE C320
DHCP Auto DNS      :1
DHCP Auto Time     :0

<AUTOUPDATE CONFIG MODULE>
Auto Pbook  Url    :tftp://172.16.10.121/my.xml
#Auto Image Url     :tftp://172.16.10.121/2c10V2_3_340_178T20140722174451.z
PNP Enable         :1
PNP IP             :224.0.1.75
PNP Port           :5060
PNP Transport      :0
PNP Interval       :1
Save Provision Info:0

<DOT1X CONFIG MODULE>
Xsup User          :admin
Xsup Password      :admin
Xsup Enable        :0
Xsup AuthMac       :01:80:C2:00:00:03
Xsup UseDefaultMac :1


发布了30 篇原创文章 · 获赞 12 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章