📄 cc_configfile_operate.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 + -