windows C语言创建配置文件,查询其中一个配置项的值并改写,不使用windows api
时间: 2024-01-25 19:02:34 浏览: 62
C语言 实现配置文件的编写与解析
要创建和操作配置文件,可以使用文件操作函数。以下是一个简单的示例代码,可以创建一个名为config.ini的配置文件,将键值对写入文件,并读取指定键的值并修改它。
```c
#include <stdio.h>
#include <string.h>
#define MAX_LINE_LEN 1024
#define MAX_KEY_LEN 128
#define MAX_VALUE_LEN 256
// 读取指定键的值
char* get_config_value(const char* file_path, const char* key)
{
static char value[MAX_VALUE_LEN];
memset(value, 0, MAX_VALUE_LEN);
FILE* fp = fopen(file_path, "r");
if (fp == NULL) {
printf("Failed to open file: %s\n", file_path);
return NULL;
}
char line[MAX_LINE_LEN];
while (fgets(line, MAX_LINE_LEN, fp) != NULL) {
if (line[0] == '#' || line[0] == '\n') {
continue;
}
char* p = strchr(line, '=');
if (p == NULL) {
continue;
}
char k[MAX_KEY_LEN];
memset(k, 0, MAX_KEY_LEN);
strncpy(k, line, p - line);
if (strcmp(k, key) == 0) {
strncpy(value, p + 1, strlen(p) - 1);
break;
}
}
fclose(fp);
return value[0] ? value : NULL;
}
// 修改指定键的值
int set_config_value(const char* file_path, const char* key, const char* value)
{
FILE* fp = fopen(file_path, "r+");
if (fp == NULL) {
printf("Failed to open file: %s\n", file_path);
return -1;
}
char line[MAX_LINE_LEN];
int found = 0;
while (fgets(line, MAX_LINE_LEN, fp) != NULL) {
if (line[0] == '#' || line[0] == '\n') {
continue;
}
char* p = strchr(line, '=');
if (p == NULL) {
continue;
}
char k[MAX_KEY_LEN];
memset(k, 0, MAX_KEY_LEN);
strncpy(k, line, p - line);
if (strcmp(k, key) == 0) {
fseek(fp, -strlen(line), SEEK_CUR);
fprintf(fp, "%s=%s\n", key, value);
found = 1;
break;
}
}
fclose(fp);
return found ? 0 : -1;
}
int main()
{
const char* file_path = "config.ini";
// 写入键值对
FILE* fp = fopen(file_path, "w");
if (fp == NULL) {
printf("Failed to create file: %s\n", file_path);
return -1;
}
fprintf(fp, "# This is a sample config file\n");
fprintf(fp, "name=John\n");
fprintf(fp, "age=30\n");
fprintf(fp, "address=123 Main St.\n");
fclose(fp);
// 读取指定键的值并修改它
char* value = get_config_value(file_path, "name");
printf("Name: %s\n", value);
if (set_config_value(file_path, "name", "David") == 0) {
printf("Name updated successfully!\n");
} else {
printf("Failed to update name!\n");
}
return 0;
}
```
在上面的示例中,我们使用了两个函数来读取和修改配置文件中的键值对:`get_config_value`和`set_config_value`。这两个函数都接受两个参数:配置文件路径和键名。`get_config_value`函数返回指定键的值,如果找不到指定键,则返回`NULL`。`set_config_value`函数将指定键的值设置为指定值,并返回0表示成功,-1表示失败。这两个函数都使用了文件操作函数`fopen`、`fgets`、`fseek`和`fprintf`来读取和修改文件内容。
阅读全文