📄 configdeal.cpp
字号:
}
}
fclose(fptmp);
sprintf(filebak,"%sbak",filename);
remove(filebak);
if(rename(filename,filebak) != 0)
{
//备份原文件rename失败
return -1;
}
if(rename(filetmp,filename) != 0)
{
//备份原文件rename失败
rename(filebak,filename);
return -1;
}
return 0;
}
/***********************************************************************
功 能:添加short型数据键和数据键值
性 质:public
输入参数:section--指定的节;item--指定的数据键;value--需要添加的数据键值
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::addcfgdata(char *section, char *item, short value)
{
sprintf(buffer,"%d",value);
return addcfgdata(section, item, buffer);
}
/***********************************************************************
功 能:添加unsigned short型数据键和数据键值
性 质:public
输入参数:section--指定的节;item--指定的数据键;value--需要添加的数据键值
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::addcfgdata(char *section, char *item, unsigned short value)
{
sprintf(buffer,"%d",value);
return addcfgdata(section, item, buffer);
}
/***********************************************************************
功 能:添加int型数据键和数据键值
性 质:public
输入参数:section--指定的节;item--指定的数据键;value--需要添加的数据键值
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::addcfgdata(char *section, char *item, int value)
{
sprintf(buffer,"%d",value);
return addcfgdata(section, item, buffer);
}
/***********************************************************************
功 能:添加unsigned int型数据键和数据键值
性 质:public
输入参数:section--指定的节;item--指定的数据键;value--需要添加的数据键值
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::addcfgdata(char *section, char *item, unsigned int value)
{
sprintf(buffer,"%d",value);
return addcfgdata(section, item, buffer);
}
/***********************************************************************
功 能:修改字符串型数据键值
性 质:public
输入参数:section--指定的节;item--指定的数据键;buf--需要添加的数据键值
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::udpcfgdata(char *section, char *item, char *buf)
{
int section_find_flag;
int item_find_flag;
FILE *fp; //文件指针
FILE *fptmp; //文件指针
char section_buf[201]; //缓存section
char getbuf[300]; //READ数据缓存区
char retbuf[300]; //找到数据键值缓存区
char filetmp[120]; //临时文件名
char filebak[120]; //备份文件名
char *pstr;
if(readcfgdata(section,item,retbuf,sizeof(retbuf)) != 0)
{
//指定的section或item不存在,出错
return -1;
}
pstr = NULL;
sprintf(filetmp,"%stmp",filename);
if ((fp = fopen(filename, "r")) == NULL)
{
//文件无法打开
return -1;
}
if ((fptmp = fopen(filetmp, "w")) == NULL)
{
//文件无法创建
fclose(fp);
return -1;
}
sprintf(section_buf,"%c%s%c",LEFTSQUARE,section,RIGHTSQUARE);
section_find_flag = -1;
item_find_flag = -1;
while(fgets(getbuf, sizeof(getbuf), fp) != NULL)
{
if((section_find_flag == 0) && (item_find_flag != 0))
{
//判断本行是否是section
if(checklinesection(getbuf) == 0)
{
//本section结束,找不到item
fclose(fp);
fclose(fptmp);
return -1;
}
//找item
pstr = NULL;
if((pstr = strstr(getbuf,item)) != NULL)
{
//去item和空格
pstr += strlen(item);
while(*pstr == BLANKCHARA)
{
pstr++;
}
//找到item
if (*pstr == EQUALCHARA)
{
item_find_flag = 0;
//修改从文件读的getbuf为输入的值,即item的值
sprintf(getbuf,"%s=%s\n",item,buf);
}
}
}
if(section_find_flag != 0)
{
//找[section]
if((pstr = strstr(getbuf,section_buf)) != NULL)
{
section_find_flag = 0;
}
}
if(fprintf(fptmp,"%s",getbuf) < 0)
{
fclose(fp);
fclose(fptmp);
return -1;
}
}
fclose(fp);
fclose(fptmp);
sprintf(filebak,"%sbak",filename);
remove(filebak);
if(rename(filename,filebak) != 0)
{
//备份原文件rename失败
return -1;
}
if(rename(filetmp,filename) != 0)
{
//备份原文件rename失败
rename(filebak,filename);
return -1;
}
return 0;
}
/***********************************************************************
功 能:修改short型数据键值
性 质:public
输入参数:section--指定的节;item--指定的数据键;value--需要添加的数据键值
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::udpcfgdata(char *section, char *item, short value)
{
sprintf(buffer,"%d",value);
return udpcfgdata(section, item, buffer);
}
/***********************************************************************
功 能:修改unsigned short型数据键值
性 质:public
输入参数:section--指定的节;item--指定的数据键;value--需要添加的数据键值
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::udpcfgdata(char *section, char *item, unsigned short value)
{
sprintf(buffer,"%d",value);
return udpcfgdata(section, item, buffer);
}
/***********************************************************************
功 能:修改unsigned int型数据键值
性 质:public
输入参数:section--指定的节;item--指定的数据键;value--需要添加的数据键值
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::udpcfgdata(char *section, char *item, unsigned int value)
{
sprintf(buffer,"%d",value);
return udpcfgdata(section, item, buffer);
}
/***********************************************************************
功 能:修改int型数据键值
性 质:public
输入参数:section--指定的节;item--指定的数据键;value--需要添加的数据键值
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::udpcfgdata(char *section, char *item, int value)
{
sprintf(buffer,"%d",value);
return udpcfgdata(section, item, buffer);
}
/***********************************************************************
功 能:设置属性filename
性 质:public
输入参数:filename--文件名
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::setfilename(char *file)
{
if(strlen(file) > sizeof(filename))
{
return -1;
}
strcpy(filename,file);
return 0;
}
/***********************************************************************
功 能:检查一行内是否存在一个sectoin
性 质:private
输入参数:buf--行数据缓冲区
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::checklinesection(char *line)
{
char *pstr;
pstr = NULL;
if ((pstr = strchr(line, LEFTSQUARE)) == NULL)
{
return -1;
}
return 0;
}
/***********************************************************************
功 能:去掉注释项和行结束符
性 质:private
输入参数:buf--行数据缓冲区
输出参数:无
返回 值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::delitemtail(char *buf)
{
char *pstr;
if((pstr = strchr(buf,ENDLINE)) != NULL)
{
*pstr = 0;
}
if((pstr = strchr(buf,ENTERLINE)) != NULL)
{
*pstr = 0;
}
if((pstr = strstr(buf,NOTEFLAG)) != NULL)
{
*pstr = 0;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -