⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configdeal.cpp

📁 我上传的程序为:群发数据管理软件的数据处理.软件可以自己从界面操作,把自己要导入的数据导入数据库.并且有导成的功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		}
	}
	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 + -