修改配置文件中的值

问题描述 投票:0回答:1

我有一个文件

a.txt
:

name1 = value1
name2 = value2
name3 = value3
name4 = value4
name5 = value5

我想将字符串

value3
更新为
89
。我编写了以下程序来实现此目的:

#include <stdio.h>
#include <string.h>

#define MAX_LEN 64

int main(void)
{
        FILE *fp = fopen("a.txt", "r+");
        char line[MAX_LEN];
        long l = 89;

        while (fgets(line, MAX_LEN, fp)) {
                if (strncmp(line, "name3", 5) == 0) {
                        fseek(fp, -1 * (strlen(line)), SEEK_CUR);
                        sprintf(line, "name3 = %ld", l);
                        fputs(line, fp);
                        goto close;
                }
        }
close:
        fflush(fp);
        fseek(fp, 0, SEEK_END);
        fclose(fp);
}

虽然值已更新,但我不确定如何删除其余的尾随字符:

lue3
。这是我执行程序后得到的结果:

name1 = value1
name2 = value2
name3 = 89lue3
name4 = value4
name5 = value5

有人可以告诉我该怎么做吗?当然,我可以将一堆

\t
附加到
sprintf()
的第二个参数来清除尾随字符,但这看起来并不酷。另外,有没有更好的方法来编写这个程序?预先感谢。

c file-handling
1个回答
0
投票

不幸的是,虽然文件中间的字节可以被覆盖,但无法插入或删除字节以使文件的剩余字节保持不变。

我认为考虑如何使用配置文件很重要。如果它是“人类可写的”,那么要求每个值后面都有一堆空格确实是不酷的。

通常,实现您想要做的事情的最简单方法是读取并解析整个文件,进行您想要的更改,然后将其写回。这适用于配置文件相对较小且更新相对不频繁的所有情况。

我假设您已经有一些代码可以将配置文件读取到某种键/值映射中以便于访问。添加额外的函数来更新特定值,然后将它们全部写回不会有太多额外的工作。

但是,我可以想象配置文件很大、经常写入并且不被认为是人类可写的情况。在这种情况下,考虑其他方法可能是合适的。例如,可以使每个值字段的长度恰好为 15 个字符。写入值字段时,请始终写入 15 个字符,并用空格适当填充。

© www.soinside.com 2019 - 2024. All rights reserved.