以下是关于C语言读取写入ini配置文件的方法实现的攻略。
什么是INI配置文件
INI配置文件是一种文本文件,用于保存程序使用的配置信息。INI文件的结构是基于Sections和Key/Value的键值对。
一个典型的INI文件包含多个Sections,而一个Section可以包含多个Key/Value键值对。如:
[Section1]
key1=value1
key2=value2
[Section2]
key3=value3
key4=value4
C语言读取INI文件
要读取INI文件,我们需要使用C语言的标准库函数fopen、fgets、sscanf等函数库。
以下是一个基本的INI文件读取函数示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE 256
/* 读取key对应的value */
char *iniReadString(char *fileName, char *sectionName, char *keyName, char *defaultValue)
{
char buf[BUF_SIZE];
char *value = NULL;
FILE *fp;
int inSection = 0;
int len;
char sectionHead[BUF_SIZE];
char *pos;
/* 打开INI文件 */
if ((fp = fopen(fileName, "r")) == NULL)
{
return strdup(defaultValue); /* 如果文件不存在,返回默认值 */
}
len = strlen(keyName);
while (fgets(buf, BUF_SIZE - 1, fp) != NULL)
{
/* 如果是section */
if (buf[0] == '[')
{
pos = strchr(buf, ']');
if (pos == NULL) continue;
*pos = 0;
strcpy(sectionHead, buf + 1);
inSection = !strcmp(sectionHead, sectionName);
continue;
}
/* 如果不在section内,则继续寻找 */
if (inSection == 0)
{
continue;
}
/* 如果是key/value对 */
pos = strchr(buf, '=');
if (pos == NULL)
{
continue;
}
*pos = 0;
if (strncmp(keyName, buf, len) == 0)
{
/* 找到了key对应的value */
value = strdup(pos + 1);
break;
}
}
fclose(fp);
if (value == NULL)
{
/* 没有找到key对应的value,则返回默认值 */
return strdup(defaultValue);
}
/* 去掉value中的空白字符 */
len = strlen(value);
while (len > 0 && isspace(value[len - 1]))
{
value[--len] = 0;
}
return value;
}
该函数需要传入ini文件名、section名、key名和默认值,如果读取失败,则返回默认值。
C语言写入INI文件
要写入INI文件,我们同样需要使用C语言的标准库函数fopen、fprintf等函数库。
以下是一个基本的INI文件写入函数示例:
int iniWriteString(char *fileName, char *sectionName, char *keyName, char *value)
{
FILE *fp;
char buf[BUF_SIZE];
char sectionHead[BUF_SIZE];
char *pos;
/* 打开INI文件 */
if ((fp = fopen(fileName, "r+")) == NULL)
{
return -1; /* 如果文件不存在,则返回失败 */
}
/* 搜索对应的section */
sprintf(sectionHead, "[%s]", sectionName);
while (fgets(buf, BUF_SIZE - 1, fp) != NULL)
{
if (strncmp(sectionHead, buf, strlen(sectionHead)) == 0)
{
/* 找到对应的section,搜索对应的key */
while (fgets(buf, BUF_SIZE - 1, fp) != NULL)
{
pos = strchr(buf, '=');
if (pos == NULL)
{
continue;
}
*pos = 0;
if (strcmp(keyName, buf) == 0)
{
/* 找到对应的key,写入新的value */
fseek(fp, -strlen(buf), SEEK_CUR);
fprintf(fp, "%s=%s\n", keyName, value);
fclose(fp);
return 0;
}
}
/* 没有找到对应的key,则在section末尾添加新的key/value */
fseek(fp, 0, SEEK_END);
fprintf(fp, "\n%s=%s\n", keyName, value);
fclose(fp);
return 0;
}
}
/* 没有找到对应的section,则在文件末尾添加新的section/key/value */
fseek(fp, 0, SEEK_END);
fprintf(fp, "\n[%s]\n", sectionName);
fprintf(fp, "%s=%s\n", keyName, value);
fclose(fp);
return 0;
}
该函数需要传入ini文件名、section名、key名和要写入的value,如果写入成功,则返回0。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言读取写入ini配置文件的方法实现 - Python技术站