当你需要对采集的文件进行序列号编排的时候,采集的文件名为20130418.dat为了对文件有更好的维护性,想对采集过来的文件进行编号。比如文件20130418_0000001.dat,这个时候以下函数就可以派上用场了。当然也可以使用数据库的序列,不过数据库的交互花销肯定要更高一点。解决办法:只要在配置文件加上以下的值,进行读取更新即可.
【SEQ】
CHARGESEQ=0000001
/******************************************************************************
* 函数名: WrtConfig
* 函数功能: 写配置文件的相关字段,适用于序列号的增加 * 输 入: 段(节)名,项目名,输入的字串 * 返回值: * 作 者: xxxxxx * 时 间: xxxxxxx * 修改记录: * 注意事项: *******************************************************************************/ int WrtConfig( char *szSegmentName, // 段(节)名
char *szItemName, // 项目名
char *szStrBuffer ) // 输入字串
{
FILE *lfp_Config =NULL;
char lz_LogMessage[256]={0};
if(!(lfp_Config = fopen(CONFIGINI, "r+"))) //打开配置文件
{
printf("\n不能打开文件配置文件");
return -1;
}
char lz_LineBuffer[LINE_BUFFER_SIZE]; //行缓冲区
char lz_SegmentName[LINE_BUFFER_SIZE];
char *lz_Pos = NULL;
int li_StepFlag =0;
int li_Length = 0;
sprintf(lz_SegmentName,"[%s]",azpSegmentName);
while (!feof( lfp_Config ))
{
lz_LineBuffer[0] = 0; //清空输出字串
fgets(lz_LineBuffer, sizeof(lz_LineBuffer), lfp_Config);
Trim(lz_LineBuffer, 0);
li_Length = strlen(lz_LineBuffer); //保存原始串长度
if (lz_LineBuffer[0] == '[' && li_StepFlag == 1) //本段结束
{
printf("\n没有找到你要修改的字段!\n");
fclose(lfp_Config);
return -1;
}
if (strncmp(lz_LineBuffer, lz_SegmentName, strlen(lz_SegmentName)) == 0)
{
li_StepFlag++;
}
if (li_StepFlag == 1) //查找项目关键字
{
if (strncmp(lz_LineBuffer, azpItemName, strlen(azpItemName)) == 0)
{
lz_Pos = strchr(lz_LineBuffer, '=') + 1;
if (lz_Pos == NULL) //没有找到相应的值,定位失败!
{
fclose(lfp_Config);
return -1;
}
size_t i=0;
for(i=0;i< strlen(azpStrBuffer);i++)
{
lz_Pos[i] = azpStrBuffer[i];
}
fseek(lfp_Config,(li_Length+1)*(-1),SEEK_CUR);
fputs(lz_LineBuffer,lfp_Config);
fflush(lfp_Config);
break;
}
}
}
fclose(lfp_Config);
return 0;
}