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

📄 inifileprocess.cpp

📁 Windows CE/Mobile SP/PPC 上封装的ini操作的dll动态库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				{ 
					buf2[n-1] = 0x00; 
					if(strlen(buf1) + strlen(buf2) > MAX_CFG_BUF) 
						goto r_cfg_end; 
					strcat(buf1, buf2); 
					continue; 
				} 
				if(strlen(buf1) + strlen(buf2) > MAX_CFG_BUF) 
					goto r_cfg_end; 
				strcat(buf1, buf2); 
				break; 
			} 
		} 
		ret = CFG_ERR_FILE_FORMAT; 
		if(SplitKeyValue(buf1, &key_ptr, &val_ptr) != 1) 
			goto r_cfg_end; 
		strtriml(strtrimr(key_ptr)); 
		if(strcmp(key_ptr, (const char *)key) != 0) 
			continue;                                  /* 和key值不匹配 */ 
		strcpy((char *)buf, (char *)val_ptr); 
		break; 
	} 
	ret = CFG_OK; 
r_cfg_end: 
	if(fp != NULL) fclose(fp); 
	return ret; 
} 

/**********************************************************************
* 函数名称: ConfigSetKey
* 功能描述: 设置key的值
* 访问的表: 无
* 修改的表: 无
* 输入参数: void *CFG_file 文件;void *section 项值;
* 			 void *key 键值;void *buf key的值
* 输出参数: 无
* 返 回 值:   0 --- ok 非0 --- error 
* 其它说明: 无
***********************************************************************/
INIFILEHANDLER_API int  ConfigSetKey(void *CFG_file, void *section, void *key, void *buf)
{ 
	FILE *fp1, *fp2; 
	char buf1[MAX_CFG_BUF + 1]; 
	int  line_no, line_no1, n, ret, ret2; 
	char *tmpfname; 
	
	ret = ConfigGetKey(CFG_file, section, key, buf1); 
	if(ret <= CFG_ERR && ret != CFG_ERR_OPEN_FILE) return ret; 
	if(ret == CFG_ERR_OPEN_FILE || ret == CFG_SECTION_NOT_FOUND) 
	{ 
		
		if((fp1 = fopen((char *)CFG_file, "a")) == NULL) 
			
			return CFG_ERR_CREATE_FILE; 
		
		if(fprintf(fp1, "%c%s%c\n", CFG_ssl, section, CFG_ssr) == EOF) 
		{ 
			fclose(fp1); 
			return CFG_ERR_WRITE_FILE; 
		} 
		if(fprintf(fp1, "%s=%s\n", key, buf) == EOF) 
		{ 
			fclose(fp1); 
			return CFG_ERR_WRITE_FILE; 
		} 
		fclose(fp1); 
		return CFG_OK; 
	}
	//////////////////////////////////////////////////////////////////////////
//	if((tmpfname = tmpnam(NULL)) == NULL) 
//		return CFG_ERR_CREATE_FILE; 
//	if((fp2 = fopen(tmpfname, "w")) == NULL) 
//		return CFG_ERR_CREATE_FILE; 

	//////////////////////////////////////////////////////////////////////////
	//if((fp2 = tmpfile() ) == NULL)
	//	return CFG_ERR_CREATE_FILE; 
	tmpfname = "tempFile";
	if((fp2 = fopen(tmpfname, "w")) == NULL) 
		return CFG_ERR_CREATE_FILE; 

	ret2 = CFG_ERR_OPEN_FILE; 
	
	if((fp1 = fopen((char *)CFG_file, "rb")) == NULL) goto w_cfg_end; 
	
	if(ret == CFG_KEY_NOT_FOUND) 
		line_no1 = CFG_section_line_no; 
	else /* ret = CFG_OK */ 
		line_no1 = CFG_key_line_no - 1; 
	for(line_no = 0; line_no < line_no1; line_no++) 
	{ 
		ret2 = CFG_ERR_READ_FILE; 
		n = FileGetLine(fp1, buf1, MAX_CFG_BUF); 
		if(n < 0) goto w_cfg_end; 
		ret2 = CFG_ERR_WRITE_FILE; 
		if(fprintf(fp2, "%s\n", buf1) == EOF) goto w_cfg_end; 
	} 
	if(ret != CFG_KEY_NOT_FOUND) 
		for( ; line_no < line_no1+CFG_key_lines; line_no++) 
		{ 
			ret2 = CFG_ERR_READ_FILE; 
			n = FileGetLine(fp1, buf1, MAX_CFG_BUF); 
			if(n < 0) goto w_cfg_end; 
		} 
		ret2 = CFG_ERR_WRITE_FILE; 
		if(fprintf(fp2, "%s=%s\n", key, buf) == EOF) goto w_cfg_end; 
		while(1) 
		{ 
			ret2 = CFG_ERR_READ_FILE; 
			n = FileGetLine(fp1, buf1, MAX_CFG_BUF); 
			if(n < -1) goto w_cfg_end; 
			if(n < 0) break; 
			ret2 = CFG_ERR_WRITE_FILE; 
			if(fprintf(fp2, "%s\n", buf1) == EOF) goto w_cfg_end; 
		} 
		ret2 = CFG_OK; 
w_cfg_end: 
		if(fp1 != NULL) fclose(fp1); 
		if(fp2 != NULL) fclose(fp2); 
		if(ret2 == CFG_OK) 
		{ 
			ret = FileCopy(tmpfname, CFG_file); 
			if(ret != 0) return CFG_ERR_CREATE_FILE; 
		} 
		USES_CONVERSION;
		DeleteFile(A2W(tmpfname));
		//remove(tmpfname); 
		return ret2; 
} 

/**********************************************************************
* 函数名称: ConfigGetSections
* 功能描述: 获得所有section
* 访问的表: 无
* 修改的表: 无
* 输入参数: void *CFG_file 文件
* 输出参数: char *sections[] 存放section名字
* 返 回 值: 返回section个数。若出错,返回负数。
* 其它说明: 无
* -----------------------------------------------
***********************************************************************/
INIFILEHANDLER_API int  ConfigGetSections(void *CFG_file, char *sections[])
{ 
	FILE *fp; 
	char buf1[MAX_CFG_BUF + 1]; 
	int  n, n_sections = 0, ret; 
	
	
	if((fp = fopen((const char *)CFG_file, "rb")) == NULL) return CFG_ERR_OPEN_FILE; 
	
	while(1)                                       /*搜找项section */ 
	{ 
		ret = CFG_ERR_READ_FILE; 
		n = FileGetLine(fp, buf1, MAX_CFG_BUF); 
		if(n < -1) goto cfg_scts_end; 
		if(n < 0) break;                             /* 文件尾 */ 
		n = strlen(strtriml(strtrimr(buf1))); 
		if(n == 0 || buf1[0] == CFG_nts) continue;       /* 空行 或 注释行 */ 
		ret = CFG_ERR_FILE_FORMAT; 
		if(n > 2 && ((buf1[0] == CFG_ssl && buf1[n-1] != CFG_ssr))) 
			goto cfg_scts_end; 
		if(buf1[0] == CFG_ssl) 
		{ 
			buf1[n-1] = 0x00; 
			strcpy(sections[n_sections], buf1+1); 
			n_sections++; 
		} 
	} 
	ret = n_sections; 
cfg_scts_end: 
	if(fp != NULL) fclose(fp); 
	return ret; 
} 

/**********************************************************************
* 函数名称: ConfigGetKeys
* 功能描述: 获得所有key的名字(key=value形式, value可用加号表示续行)
* 访问的表: 无
* 修改的表: 无
* 输入参数: void *CFG_file 文件 void *section 项值
* 输出参数: char *keys[] 存放key名字
* 返 回 值: 返回key个数。若出错,返回负数。
* 其它说明: 无

***********************************************************************/
INIFILEHANDLER_API int  ConfigGetKeys(void *CFG_file, void *section, char *keys[])
{ 
	FILE *fp; 
	char buf1[MAX_CFG_BUF + 1], buf2[MAX_CFG_BUF + 1]; 
	char *key_ptr, *val_ptr; 
	int  n, n_keys = 0, ret; 
	
	
	if((fp = fopen((const char *)CFG_file, "rb")) == NULL) return CFG_ERR_OPEN_FILE; 
	
	while(1)                                       /* 搜找项section */ 
	{ 
		ret = CFG_ERR_READ_FILE; 
		n = FileGetLine(fp, buf1, MAX_CFG_BUF); 
		if(n < -1) goto cfg_keys_end; 
		ret = CFG_SECTION_NOT_FOUND; 
		if(n < 0) goto cfg_keys_end;                 /* 文件尾 */ 
		n = strlen(strtriml(strtrimr(buf1))); 
		if(n == 0 || buf1[0] == CFG_nts) continue;       /* 空行 或 注释行 */ 
		ret = CFG_ERR_FILE_FORMAT; 
		if(n > 2 && ((buf1[0] == CFG_ssl && buf1[n-1] != CFG_ssr))) 
			goto cfg_keys_end; 
		if(buf1[0] == CFG_ssl) 
		{ 
			buf1[n-1] = 0x00; 
			if(strcmp(buf1+1, (const char *)section) == 0) 
				break;                                   /* 找到项section */ 
		} 
	} 
	while(1) 
	{ 
		ret = CFG_ERR_READ_FILE; 
		n = FileGetLine(fp, buf1, MAX_CFG_BUF); 
		if(n < -1) goto cfg_keys_end; 
		if(n < 0) break;                             /* 文件尾 */ 
		n = strlen(strtriml(strtrimr(buf1))); 
		if(n == 0 || buf1[0] == CFG_nts) continue;       /* 空行 或 注释行 */ 
		ret = CFG_KEY_NOT_FOUND; 
		if(buf1[0] == CFG_ssl) 
			break;                                     /* 另一个 section */ 
		if(buf1[n-1] == '+')                         /* 遇+号表示下一行继续 */ 
		{ 
			buf1[n-1] = 0x00; 
			while(1) 
			{ 
				ret = CFG_ERR_READ_FILE; 
				n = FileGetLine(fp, buf2, MAX_CFG_BUF); 
				if(n < -1) goto cfg_keys_end; 
				if(n < 0) break;                         /* 文件尾 */ 
				n = strlen(strtrimr(buf2)); 
				ret = CFG_ERR_EXCEED_BUF_SIZE; 
				if(n > 0 && buf2[n-1] == '+')            /* 遇+号表示下一行继续 */ 
				{ 
					buf2[n-1] = 0x00; 
					if(strlen(buf1) + strlen(buf2) > MAX_CFG_BUF) 
						goto cfg_keys_end; 
					strcat(buf1, buf2); 
					continue; 
				} 
				if(strlen(buf1) + strlen(buf2) > MAX_CFG_BUF) 
					goto cfg_keys_end; 
				strcat(buf1, buf2); 
				break; 
			} 
		} 
		ret = CFG_ERR_FILE_FORMAT; 
		if(SplitKeyValue(buf1, &key_ptr, &val_ptr) != 1) 
			goto cfg_keys_end; 
		strtriml(strtrimr(key_ptr));
		strcpy(keys[n_keys], key_ptr); 
		n_keys++; 
	} 
	ret = n_keys; 
cfg_keys_end: 
	if(fp != NULL) fclose(fp); 
	return ret; 
}


/**********************************************************************
* 函数名称: INIFileTstmain
* 功能描述: 测试函数入口
* 访问的表: 无
* 修改的表: 无
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 其它说明: 无
***********************************************************************/
/*
void INIFileTstmain(void)
{
	char buf[64]="";
	char buf1[20]="";
	char buf2[20]="";
	char buf3[20]="";
	int  ret;
	long abc;
	int i;
	
	char * section;
	char * key;
	char * val;
	char * name;
	char * index;
	section = buf1;
	key = buf2;
	val = buf3;
	
	ret = ConfigSetKey("Config.dat", "Jack:Lio", "Jack", "-12321");
	
	for(i = 0;i < 3; i++)
	{
		memset(buf,0x00,20);
		memset(buf1,0x00,20);
		memset(buf2,0x00,20);
		memset(buf3,0x00,20);
		sprintf(buf,"%d",i);
		sprintf(buf2,"Lio%d",i);
		sprintf(buf3,"%d",i);
		JoinNameIndexToSection(&section, "Jack", buf);
		ConfigSetKey("Config.dat", section, key, val);
	}
	
	name = buf2;
	index = buf3;
	memset(buf1,0x00,20);
	memset(buf2,0x00,20);
	memset(buf3,0x00,20);
	strcpy(buf1,"Jack:Lio");
	SplitSectionToNameIndex(section, &name, &index);
	printf("\n name=%s,index=%s\n",name,index);
	
	ret = ConfigGetKey("Config.dat", "Jack:Lio", "Jack", buf);
	ret = ConfigSetKey("Config.dat", "Config:Path", "Path" , "\\Program Files\\iwt\\CellGuard\\CellGuard.exe");
	ret = ConfigSetKey("Config.dat", "Config:SmsBlock", "SmsBlock" , "1");
	ret = ConfigSetKey("Config.dat", "Config:SmsReply", "SmsReply" , "现在忙,待会回复你。");

	ret = ConfigSetKey("AppData.dat", "Config:Param", "password" , "c4ca4238a0b923820dcc509a6f75849b");
	ret = ConfigSetKey("AppData.dat", "Config:Param", "smsEnbleBlock" , "0");
	ret = ConfigGetKey("AppData.dat", "Config:Param", "password", buf);
	ret = ConfigGetKey("AppData.dat", "Config:Param", "smsEnbleBlock", buf);



	ret = ConfigGetKey("Config.dat", "Config:Path", "Path", buf);
	ret = ConfigGetKey("Config.dat", "Config:SmsBlock", "SmsBlock", buf);
	ret = ConfigGetKey("Config.dat", "Config:SmsReply", "SmsReply", buf);



	if (strcmp(buf,"")!=0) {
		abc = atol(buf);
	}
	
	printf("\n buf=%s\n",buf);	
	printf("\n abc=%ld\n",abc);
	
	ConfigSetKey("Config.dat","Jack:Lio", "Email", "liaoyuewang@163.com");

	FileCopy("Config.dat", "Configbak.dat");

	printf("\nFile %s line%d\n",__FILE__,__LINE__);

	printf("\n******** This test is created by Jack Lio. Email:liaoyuewang@163.com********\n\n");
	
	
}
*/

/*
void INIFileTstmain(void)
{
	char buf[64]="";
	int  ret;

	ret = ConfigGetKey("Config.dat", "Jack:Lio", "Jack", buf);
	ret = ConfigSetKey("Config.dat", "Config:Path", "Path" , "\\Program Files\\iwt\\CellGuard\\CellGuard.exe");
	ret = ConfigSetKey("Config.dat", "Config:SmsBlock", "SmsBlock" , "1");
	ret = ConfigSetKey("Config.dat", "Config:SmsReply", "SmsReply" , "好的,等会见");

	ret = ConfigSetKey("c:\\CellGuard.dat", "Config:Data", "password" , "c4ca4238a0b923820dcc509a6f75849b");
	ret = ConfigSetKey("c:\\CellGuard.dat", "Config:Data", "smsEnbleBlock" , "0");
	ret = ConfigGetKey("c:\\CellGuard.dat", "Config:Data", "password", buf);
	ret = ConfigGetKey("c:\\CellGuard.dat", "Config:Data", "smsEnbleBlock", buf);



	ret = ConfigGetKey("Config.dat", "Config:Path", "Path", buf);
	ret = ConfigGetKey("Config.dat", "Config:SmsBlock", "SmsBlock", buf);
	ret = ConfigGetKey("Config.dat", "Config:SmsReply", "SmsReply", buf);


}
*/

⌨️ 快捷键说明

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