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

📄 configdeal.cpp

📁 我上传的程序为:群发数据管理软件的数据处理.软件可以自己从界面操作,把自己要导入的数据导入数据库.并且有导成的功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************
* Copyright (c) 2001
* All rights reserved.
*
* 文件名称:configdeal.cpp
* 文件标识:ZJ-EC-SEPA-PROC-P016-0002
* 摘    要:定义Cconfigdeal类,提供配置表文件读、写、修改等功能
* 
* 当前版本:2.0
* 作    者:曾新荣
* 完成日期:2001年12月20日
*
* 取代版本:1.0 
* 原作者  :何爱民
* 完成日期:2001年11月15日
**********************************************************************/
#include "stdafx.h"
#include "configdeal.h"

Cconfigdeal::Cconfigdeal()
{
	filename[0] = '\0';
}

Cconfigdeal::~Cconfigdeal()
{

}

/***********************************************************************
功    能:从配置表读指定节指定项的字符串型值,用buf带回
性    质:public
输入参数:section--指定的节;item--指定的数据键;buflen--缓存区buf的大小
输出参数:buf--带回字符串型值的缓存区
返回  值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::readcfgdata(char *section, char *item, char *buf, int buflen)
{
	int		section_find_flag;
	int		item_find_flag;
	int		no_require_read_flag;
	FILE 	*fp;						//文件指针
	char	section_buf[201];			//缓存section
	char	getbuf[300];				//READ数据缓存区
	char	retbuf[300];				//找到数据键值缓存区
	char	*pstr;

	pstr = NULL;
	if ((fp = fopen(filename, "r")) == NULL) 
	{
		//文件无法打开
		return -1;
	}
	
	if((section == NULL) || (strlen(section) > (sizeof(section_buf) - 2)))
	{
		//section不合法
		fclose(fp);
		return -1;
	}
	sprintf(section_buf,"%c%s%c",LEFTSQUARE,section,RIGHTSQUARE);
	
	if((item == NULL) || (strlen(item) > sizeof(getbuf)))
	{
		//item不合法
		fclose(fp);
		return -1;
	}

	//从文件中读数据
	section_find_flag = -1;
	item_find_flag = -1;
	no_require_read_flag = -1;
	while(fgets(getbuf, sizeof(getbuf), fp) != NULL) 
	{
		//找[section]
		if(section_find_flag == -1)
		{
			//找[section]
			if((pstr = strstr(getbuf,section_buf)) != NULL)
			{
				section_find_flag = 0;
				continue;
			}
		}
		//找item
		if(section_find_flag == 0)
		{
			//判断本行是否是section
			if(checklinesection(getbuf) == 0)
			{
				//本section结束,找不到item
				no_require_read_flag = 0;
				break;
			}
			//找item
			if((pstr = strstr(getbuf,item)) != NULL)
			{
				//去item和空格
				pstr += strlen(item);
				while(*pstr == BLANKCHARA)
				{
					pstr++;
				}
				//找到item
				if (*pstr == EQUALCHARA)
				{
					item_find_flag = 0;
					no_require_read_flag = 0;
					pstr++;
					strcpy(retbuf,pstr);
					delitemtail(retbuf);
					break;
				}
			}
		}
		//不需要读文件,退出文件
		if(no_require_read_flag == 0)
		{
			break;
		}
	}
	fclose(fp);
	
	//没有找到
	if(item_find_flag != 0)
	{
		return -1;
	}
	//返回缓冲区不够大
	if(buflen < (int)strlen(retbuf))
	{
		return -1;
	}
	strcpy(buf,retbuf);
	return 0;
}

/***********************************************************************
功	  能:从配置表读指定节指定项的short型值,用buf带回
性    质:public
输入参数:section--指定的节;item--指定的数据键
输出参数:valuep--带回short型值的指针
返回  值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::readcfgdata(char *section, char *item, short *valuep)
{
	if(readcfgdata(section,item,buffer,sizeof(buffer)) != 0)
	{
		return -1;
	}
	*valuep = (short)atoi(buffer);
	return 0;
}

/***********************************************************************
功	  能:从配置表读指定节指定项的unsigned short型值,用buf带回
性    质:public
输入参数:section--指定的节;item--指定的数据键
输出参数:valuep--带回unsigned short型值的指针
返回  值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::readcfgdata(char *section, char *item, unsigned short *valuep)
{
	if(readcfgdata(section,item,buffer,sizeof(buffer)) != 0)
	{
		return -1;
	}
	*valuep = (unsigned short)atoi(buffer);
	return 0;
}

/***********************************************************************
功	  能:从配置表读指定节指定项的int型值,用buf带回
性    质:public
输入参数:section--指定的节;item--指定的数据键
输出参数:valuep--带回int型值的指针
返回  值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::readcfgdata(char *section, char *item, int *valuep)
{
	if(readcfgdata(section,item,buffer,sizeof(buffer)) != 0)
	{
		return -1;
	}
	*valuep = atoi(buffer);
	return 0;
}

/***********************************************************************
功	  能:从配置表读指定节指定项的unsigned int型值,用buf带回
性    质:public
输入参数:section--指定的节;item--指定的数据键
输出参数:valuep--带回unsigned int型值的指针
返回  值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::readcfgdata(char *section, char *item, unsigned int *valuep)
{
	if(readcfgdata(section,item,buffer,sizeof(buffer)) != 0)
	{
		return -1;
	}
	*valuep = (unsigned int)atoi(buffer);
	return 0;
}

/***********************************************************************
功    能:添加字符串型数据键和数据键值
性    质:public
输入参数:section--指定的节;item--指定的数据键;buf--需要添加的数据键值
输出参数:无
返回  值:0--成功;-1--失败
***********************************************************************/
int Cconfigdeal::addcfgdata(char *section, char *item, char *buf)
{
	int		section_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)
	{
		//已经存在,出错
		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;
	while(fgets(getbuf, sizeof(getbuf), fp) != NULL) 
	{
		//找[section]
		if((pstr = strstr(getbuf,section_buf)) != NULL)
		{
			//写入[section]项
			if(fprintf(fptmp,"%s",getbuf) < 0)
			{
				fclose(fp);
				fclose(fptmp);
				return -1;
			}
			section_find_flag = 0;
			//写入item项
			if(fprintf(fptmp,"%s=%s\n",item,buf) < 0)
			{
				fclose(fp);
				fclose(fptmp);
				return -1;
			}
		}
		else
		{
			if(fprintf(fptmp,"%s",getbuf) < 0)
			{
				fclose(fp);
				fclose(fptmp);
				return -1;
			}
		}
	}
	fclose(fp);
	//如果[section]不存在
	if(section_find_flag != 0)
	{
		//写入[section]项
		if(fprintf(fptmp,"%s\n",section_buf) < 0)
		{
			fclose(fptmp);
			return -1;
		}
		//写入item项
		if(fprintf(fptmp,"%s=%s\n",item,buf) < 0)
		{
			fclose(fptmp);
			return -1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -