📄 getcfg.cpp
字号:
#include <vcl.h>
#include <string.h>
#include <stdio.h>
#include <dir.h>
void get_file_name(char * full_path_name,char * file_name)
{
int p;
p=strlen(full_path_name);
while( (full_path_name[p-1]!='\\')&&(p!=0) )
p--;
sprintf(file_name,"%s",full_path_name+p);
}
void get_file_name1(char * full_path_name,char * file_name)
{
int p;
p=strlen(full_path_name);
while( (full_path_name[p-1]!='/')&&(p!=0) )
p--;
sprintf(file_name,"%s",full_path_name+p);
}
/*************GET_CFG***************/
/****************************************** 除去注释内容******************************************/extern char * FilterRemark(char *src, char *dest){ char *ptr; ptr=strtok(src, "#"); strcpy(dest, ptr); return dest;}/************************* 过滤回车符**************************/static char *FilterCR(char *str){ char *ptr; ptr = strchr(str, '\n'); if (ptr != NULL) *ptr = '\0'; return str;}/************************ 删除前后空格*************************/static char *alltrim(char *str){ static char buffer[81]; char *ptr; int i, j, k; for (i = 0; ((str[i] == ' ') || (str[i] == '\t'))&& str[i] != '\0'; i++); for (j = strlen(str) - 1; ((str[j] == ' ') || (str[j] == '\t'))&& j >= 0 ; j--) str[j]='\0'; sprintf(buffer,"%s",str+i); sprintf(str,"%s",buffer); return str;}/****************************************** *取配置文件中设置项的值 *cfg_file 配置文件全路径名 *cfg_seg 段名 *cfg_item 设置项名称 *value 设置项的值 *返回码 0: 成功 * -1: 配置文件不存在 * -2: 未找到配置节 * -3: 未找到配置项 *******************************************/int GetCfgItem(char * cfg_file,char *cfg_seg, char *cfg_item, char *value){ FILE *fp; char item[256], buffer[256], buf[100], *ptr; int flag; if ((fp = fopen(cfg_file, "r+")) == NULL) return -1; flag = 0; sprintf(buf, "[%s]", cfg_seg); while (fgets(buffer, 256, fp) != NULL) { FilterRemark(buffer, item); if (strstr(item, buf) != NULL) { flag = 1; break; } } if (flag != 1) { fclose(fp); return -2; } sprintf(buf, "%s=", cfg_item); flag = 0; while(fgets(buffer, 256, fp) != 0) { FilterRemark(buffer, item); FilterCR(item); if (strstr(item, buf) != NULL) { ptr = strchr(item, '='); strcpy(value, alltrim(ptr+1)); flag = 1; break; } else if (strchr(item, '[') != NULL && strchr(item, ']') != NULL) { flag = 2; break; } } fclose(fp); if (flag != 1) return -3; else { alltrim(value); return 0; }}/****************************************** *修改配置文件中设置项的值 *cfg_file 配置文件全路径名 *cfg_seg 段名 *cfg_item 设置项名称 *value 设置项的值 *返回码 0: 成功 * -1: 配置文件不存在 * -2: 未找到配置节 * -3: 文件不能写 *******************************************/int ModifyCfgItem(char *cfg_file,char *cfg_seg, char *cfg_item, char *value){ FILE *fp,*fp1; char item[256], buffer[256], buf[81], old_value[50], *ptr,tmp_file[100]; char tmp_buff[256]; int flag; sprintf(buf, "%s",cfg_file); if ((fp = fopen(buf, "r+")) == NULL) return -1; tmpnam(tmp_file); if ((fp1 = fopen(tmp_file, "a+")) == NULL) return -4; //找段名 flag = 0; sprintf(buf, "[%s]", cfg_seg); while (fgets(buffer, 256, fp) != NULL) { fprintf(fp1,"%s",buffer); FilterRemark(buffer, item); if (strstr(item, buf) != NULL) { flag = 1; break; } } if (flag != 1) { fclose(fp); fclose(fp1); return -2; } //找设置项,找到修改它 flag = 0; sprintf(buf, "%s=", cfg_item); while(fgets(buffer, 256, fp) != 0) { sprintf(tmp_buff,"%s",buffer); FilterRemark(buffer, item); FilterCR(item); //匹配 if (strstr(item, buf) != NULL) { sprintf(tmp_buff,"%s=",cfg_item); strcat(tmp_buff,value); fprintf(fp1,"%s\n",tmp_buff); break; } else /*未找到此项*/ if (strchr(item, '[') != NULL && strchr(item, ']') != NULL) { fprintf(fp1,"%s\n",tmp_buff); flag = 1; break; } else fprintf(fp1,"%s",tmp_buff); } //把未扫描过的文件内容写入文件 while(fgets(buffer, 256, fp) != 0) fprintf(fp1,"%s",buffer); fclose(fp1); fclose(fp); //临时文件易名为配置文件名 getcwd(buffer, 256); strcat(buffer,"\\"); strcat(buffer,tmp_file); if( flag==0 ){ //if( !MoveFileEx(buffer,cfg_file,MOVEFILE_REPLACE_EXISTING) ) if( !DeleteFile(cfg_file) || !MoveFile(buffer,cfg_file) ) flag=5; } return flag;}/*大写字母转为小写字母*/void U2L( char * buff){ unsigned int i; for(i=0;i<strlen(buff);i++) if( buff[i]>=65 && buff[i]<=90 ) buff[i]=buff[i]+32; //转为小写}
/******************************************
功能: 从字符串中取数据数据项
入参: str 字符串
fgf 分隔符 如'|'
item_no 项目顺序号
val 取到的数据项
val_len 存放数据项缓冲的最大长度
返回: 0成功 !0失败
*******************************************/
int GetItemFromStr(char * str,char fgf,int item_no,char * val,int val_len )
{
int len,fgf_no,i,j,count;
len=strlen(str);
if( len==0 ){
val[0]='\0';
return(0);
}
item_no=item_no-1;
//定位分隔符
for(i=0,count=0; count<item_no && i<len-1; ){
for(;str[i]!=fgf&&i<len-1 ; i++);
count++;
if( i==len-1&& count<item_no ){
val[0]='0';
return(1);
}
i++;
}
//取数据项
if( i==len-1 )
val[0]='0';
else{
for(j=0; (str[i]!=fgf)&&(i<len)&&(j<val_len-1); i++,j++)
val[j]=str[i] ;
val[j]='\0';
if( (j==val_len-1) && (str[i]!=fgf) ) //数据项太长
return(2);
}
return( 0 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -