UNIX修改配置文件域中关键字的值

来源:互联网 发布:sql 查询最高分数的人 编辑:程序博客网 时间:2024/06/05 15:14

当你需要对采集的文件进行序列号编排的时候,采集的文件名为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; }