本程序是爲了解決對配置文件是否發生改變所做的修改,用計算文件的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