對配置文件的解析及重構

本程序是爲了解決對配置文件是否發生改變所做的修改,用計算文件的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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章