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

📄 cc_configfile_operate.c

📁 Linux平台环境下
💻 C
字号:
#include "spalarm.h"

int CC_CreateFile(char *filename)
{
	FILE *fp;
	if ((fp = fopen("/my_temp.ini", "w"))==NULL)
		return -1;//打开临时文件失败
	if (rename("/my_temp.ini", filename) != 0)
		return -2;//将临时文件改名为filename失败
	fclose(fp);
	return 1;//创建文件成功
}

int CC_FindConfig_File(char *filename)
{
	FILE    *fp;
	 if( ( fp = fopen(filename, "r") ) == NULL )
		return -1; 
	 else
		 fclose(fp);
	 return 1;
}

int CC_FindConfig_Section(char *filename, char *section)
{
	FILE    *fp; 
    char    readStr[200], tmpstr[100]; 
    int findSection = 0;

	if( ( fp = fopen(filename, "r") ) == NULL )	
		return -1;//文件不存在 

    while(!feof(fp))	
	{
		memset( readStr, 0x00, sizeof( readStr ) ); 
		memset(tmpstr, 0, sizeof(tmpstr));
        fgets( readStr, 80, fp ); 
		readStr[strlen(readStr)-1] = 0;      // 去掉换行符 '0x0A' 
        
        if (readStr[0] == '[')	{ 
            memcpy(tmpstr, readStr + 1, strlen(section) ); 
            if (memcmp(section, tmpstr, strlen(tmpstr) ) == 0)
			{
				findSection = 1; 
				break;
			}
        } 
	}
	fclose(fp);
	if (findSection != 1)
		return -2;//节点不存在
	else
		return 1;//节点存在
}

int CC_FindConfig_Item(char *filename, char *section, char *item)
{
	FILE    *fp; 
    char    readStr[200], tmpstr[100]; 
    int findSection = 0;
	int findItem = 0;

    if( ( fp = fopen(filename, "r") ) == NULL )	
		return -1; //文件不存在

    while(!feof(fp))	{
		memset( readStr, 0x00, sizeof( readStr ) ); 
		memset(tmpstr, 0, sizeof(tmpstr));
        fgets( readStr, 80, fp ); 
		readStr[strlen(readStr)-1] = 0;      // 去掉换行符 '0x0A' 
         
        if (readStr[0] == '[')	{
			findSection = 0; 
            memcpy(tmpstr, readStr + 1, strlen(section) ); 

            if (memcmp(section, tmpstr, strlen(tmpstr) ) == 0) 
				findSection = 1; 
        } 
        else	{
			if (findSection == 0) 
				continue; 
			if (memcmp(readStr, item, strlen(item)) == 0)	{
				findItem = 1;
                break; 
             } 
        } 
    }
	
	fclose(fp);

	if (findItem == 0)
		return -2;//属性不存在
	else
		return 1;
}

int  CC_FindConfig_Value( char *filename, char *section, char *item, char *value)
{
	FILE    *fp; 
    char    readStr[200], tmpstr[100]; 
    int findSection = 0;
	int findItem = 0;

    if( ( fp = fopen(filename, "r") ) == NULL )	
		return -1; //文件不存在

    while(!feof(fp))	{
		memset( readStr, 0x00, sizeof( readStr ) );
		memset(tmpstr, 0, sizeof(tmpstr)); 
        fgets( readStr, 80, fp ); 
		readStr[strlen(readStr)-1] = 0;      // 去掉换行符 '0x0A' 
        
        if (readStr[0] == '[')	{
			findSection = 0; 
            memcpy(tmpstr, readStr + 1, strlen(section) ); 

            if (memcmp(section, tmpstr, strlen(tmpstr) ) == 0) 
				findSection = 1; 
        } 
        else	{
			if (findSection == 0) 
				continue; 
			if (memcmp(readStr, item, strlen(item)) == 0)	{
				findItem = 1;
				strcpy(value, readStr + strlen(item) + 1); 
                break; 
             } 
        } 
    }
	
	fclose(fp);

	if (findItem == 0)
		return -2;//属性不存在
	if (memcmp(value, "", strlen(value)) == 0)
		return -3;//属性值为空
	 
	return 1; //找到属性值
}

int CC_WriteConfig_Section(char *filename, char *section)
{
	FILE *fp;
	FILE *ftemp; 
    char    readStr[200]; 
	if(( fp = fopen(filename, "r") ) == NULL)	
		return -1;//文件不存在
	if ((ftemp = fopen("/my_temp.ini", "w"))==NULL)
		return -2;//打开临时文件失败
	if (memcmp(section, "", strlen(section)) == 0)
		return -3;//section节点为空	
	while(!feof(fp))	
	{
		memset( readStr, 0x00, sizeof( readStr ) ); 
        
		fgets( readStr, 80, fp ); 
		readStr[strlen(readStr)-1] = 0;      // 去掉换行符 '0x0A' 
        fwrite(readStr, 1, strlen(readStr), ftemp);
		fwrite("\n", 1, 1, ftemp); 
    }	
	fclose(fp);
	
	fwrite("[", 1, 1, ftemp);
	fwrite(section, 1, strlen(section), ftemp);
	fwrite("]", 1, 1, ftemp);
	fwrite("\n", 1, 1, ftemp);
	fclose(ftemp);
	
	if(remove(filename) != 0 || rename("/my_temp.ini", filename) != 0)
		return -4;//向临时文件/my_temp.ini写入secction节点成功,但删除原文件、更改临时文件名时发生错误
	return 1;//写入section节点成功
}

int CC_WriteConfig_Item(char *filename, char *section, char *item)
{
	FILE *fp;
	FILE *ftemp; 
    char    readStr[200], tmpstr[100]; 
	//int findSection = 0;
	if(( fp = fopen(filename, "r") ) == NULL)	
		return -1;//文件不存在
	if ((ftemp = fopen("/my_temp.ini", "w"))==NULL)
		return -2;//打开临时文件失败
	if (memcmp(section, "", strlen(section)) == 0)
		return -3;//section节点为空
	if (memcmp(item, "", strlen(item)) == 0)
		return -4;//item属性为空
	while(!feof(fp))	
	{
		memset( readStr, 0x00, sizeof( readStr ) ); 
        memset(tmpstr, 0, sizeof(tmpstr));
		fgets( readStr, 80, fp ); 
		readStr[strlen(readStr)-1] = 0;      // 去掉换行符 '0x0A' 
		
		fwrite(readStr, 1, strlen(readStr), ftemp);
		fwrite("\n", 1, 1, ftemp); 

		if (readStr[0] == '[')	{ 
            memcpy(tmpstr, readStr + 1, strlen(section) ); 
            if (memcmp(section, tmpstr, strlen(tmpstr) ) == 0)
			{
				fwrite(item, 1, strlen(item), ftemp);
				fwrite("=", 1, 1, ftemp);
				fwrite("\n", 1, 1, ftemp);
			}
		}
    }
	fclose(ftemp);
	
	if(remove(filename) != 0 || rename("/my_temp.ini", filename) != 0)
		return -5;//向临时文件/my_temp.ini写入item属性成功,但删除原文件、更改临时文件名时发生错误

	return 1;//写入item属性成功
}

int  CC_WriteConfig_Value( char *filename, char *section, char *item, char *value) 
{
	FILE *fp;
	FILE *ftemp; 
    char    readStr[200], tmpstr[100]; 
	int findSection = 0; 

	if	(( fp = fopen(filename, "r") ) == NULL)	
		return -1;//文件不存在
	if	((ftemp = fopen("/my_temp.ini", "w"))==NULL)
		return -2;//打开临时文件失败
	if	(memcmp(section, "", strlen(section)) == 0)
		return -3;//section节点为空
	if	(memcmp(item, "", strlen(item)) == 0)
		return -4;//item属性为空
	if	(memcmp(value, "", strlen(value)) == 0)
		return -5;//value属性为空
    while(!feof(fp))	
	{
		memset( readStr, 0x00, sizeof( readStr ) ); 
		memset(tmpstr, 0, sizeof(tmpstr)); 
        fgets( readStr, 80, fp ); 
		readStr[strlen(readStr)-1] = 0;      // 去掉换行符 '0x0A' 
        
        if (readStr[0] == '[')	
		{
			fwrite(readStr, 1, strlen(readStr), ftemp);
			memcpy(tmpstr, readStr + 1, strlen(section) );
			fwrite("\n", 1, 1, ftemp);
			findSection = 0; 
           
            if (memcmp(section, tmpstr, strlen(tmpstr) ) == 0) 
				findSection = 1; 
        } 
        else	
		{
			if (findSection == 0) 
			{
				fwrite(readStr, 1, strlen(readStr), ftemp);
				fwrite("\n", 1, 1, ftemp);
				continue; 
			}
			if (memcmp(readStr, item, strlen(item)) == 0)	
			{
				fwrite(readStr, 1, strlen(item)+1, ftemp);
				fwrite(value, 1, strlen(value), ftemp);
				fwrite("\n", 1, 1, ftemp);
             }
			 else
			{
				fwrite(readStr, 1, strlen(readStr), ftemp);
				fwrite("\n", 1, 1, ftemp);
			}
        } 
    }
	fclose(fp); 
	fclose(ftemp);
	if(remove(filename) != 0 || rename("/my_temp.ini", filename) != 0)
		return -6;

	return 1; 
}

int CC_DeleteConfig_Section(char *filename, char *section)
{
	if	(memcmp(section, "", strlen(section)) == 0)
		return -3;//section节点为空
	
	int ret = 0;
	ret = CC_FindConfig_Section(filename, section);
	if ( ret != 1)//文件不存在或节点不存在ret=-1或ret=-2
		return ret;

	FILE *fp;
	FILE *ftemp; 
    char    readStr[200], tmpstr[100]; 
	int findSection = 0; 

	fp = fopen(filename, "r");
	if	(fp == NULL)
		return -4;//打开文件失败
	
	ftemp = fopen("/my_temp.ini", "w");
	if (ftemp == NULL)
		return -4;//打开文件失败
	
	while(!feof(fp))
	{
		memset( readStr, 0x00, sizeof( readStr ) ); 
		memset(tmpstr, 0, sizeof(tmpstr));
        fgets( readStr, 80, fp ); 
		readStr[strlen(readStr)-1] = 0;      // 去掉换行符 '0x0A' 
         
        if (readStr[0] == '[')	{
			memcpy(tmpstr, readStr + 1, strlen(section) );
			if (memcmp(section, tmpstr, strlen(tmpstr) ) == 0)
			{
				findSection = 1; 
			}
			else
			{
				fwrite(readStr, 1, strlen(readStr), ftemp);
				fwrite("\n", 1, 1, ftemp);
				findSection = 0; 
			}
        } 
        else
		{
			if (findSection != 1)
			{
				fwrite(readStr, 1, strlen(readStr), ftemp);
				fwrite("\n", 1, 1, ftemp);
			}
        } 
    }
	fclose(fp); 
	fclose(ftemp);
	if(remove(filename) != 0 || rename("/my_temp.ini", filename) != 0)
		return -5;//从配置文件中删除section节点(包括该节点下的属性和属性值)成功,但删除原文件、更改临时文件名时发生错误
	return 1; 
}

int CC_DeleteConfig_Item(char *filename, char *section, char *item)
{
	if	(memcmp(section, "", strlen(section)) == 0)
		return -3;//section参数为空
	if (memcmp(item, "", strlen(item)) == 0)
		return -4;//item参数为空
	
	int ret = 0;
	ret = CC_FindConfig_Item(filename, section, item);
	if ( ret != 1)//文件不存在或属性不存在ret=-1或ret=-2
		return ret;
	
	FILE *fp;
	FILE *ftemp; 
    char    readStr[200], tmpstr[100]; 
	int findSection = 0; 

	fp = fopen(filename, "r");
	if	(fp == NULL)
		return -5;//打开文件失败
	
	ftemp = fopen("/my_temp.ini", "w");
	if (ftemp == NULL)
		return -5;//打开文件失败
	
	while(!feof(fp))
	{
		memset( readStr, 0x00, sizeof( readStr ) ); 
		memset(tmpstr, 0, sizeof(tmpstr));
        fgets( readStr, 80, fp ); 
		readStr[strlen(readStr)-1] = 0;      // 去掉换行符 '0x0A' 
         
        if (readStr[0] == '[')	{
			findSection = 0;
			fwrite(readStr, 1, strlen(readStr), ftemp);
			fwrite("\n", 1, 1, ftemp);
			
			memcpy(tmpstr, readStr + 1, strlen(section) );
			if (memcmp(section, tmpstr, strlen(tmpstr) ) == 0) 
				findSection = 1;
        } 
        else
		{
			if (findSection == 0)
			{
				fwrite(readStr, 1, strlen(readStr), ftemp);
				fwrite("\n", 1, 1, ftemp);
			}
			else
			{
				if (memcmp(readStr, item, strlen(item)) != 0)	
				{
					fwrite(readStr, 1, strlen(readStr), ftemp);
					fwrite("\n", 1, 1, ftemp);
				} 
			}
        } 
    }
	fclose(fp); 
	fclose(ftemp);
	if(remove(filename) != 0 || rename("/my_temp.ini", filename) != 0)
		return -6;//从配置文件中删除item属性成功,但删除原文件、更改临时文件名时发生错误
	return 1; 
}

⌨️ 快捷键说明

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