如何以简单的方式在C中编辑文本文件?

时间:2012-03-27 08:50:03

标签: c linux gcc fopen printf

我在C中有以下代码。我正在尝试查找以已知单词开头的行,以便用新信息写回该行。我发现的问题是,当我找到它时,流fp已经在我想要编辑的行之后,所以我需要回到那一行才能编写它。我怎么能这样做?感谢。

FILE *fp;
char line[256];
char description[128];

memset(description, 0, sizeof (description));

if (!(fp = (FILE*) fopen("/etc/samba/smb.conf", "r+"))) {
    printf("Error opening smb.conf\n");
    return -1;
}
while (fgets(line, sizeof line, fp)) {
    if (!strncmp(line, "comment =", 9)) {
        sscanf(line, "comment = %[^\t\n]", description);
        printf("Old comment found: %s\n",description);
        fprintf(fp, "comment = %s\n", "New Comment here");
    }
}
fclose(fp);

2 个答案:

答案 0 :(得分:4)

即使有办法“回到上一行”,你的方法也不会有效。它只会在你用一条完全相同长度的线替换时才有效。 (你可以使用空白填充来插入比原始行更短的行,但如果你想插入的数据比原来那样多,那就不行了。)

创建一个新文件,将所有内容复制(根据需要进行修改),并在成功完成后替换原始文件。

备选方案,在内存中读取文件(根据需要修改),并覆盖原始文件。

如果没有上述内容,您无法在文件中间“插入”。

答案 1 :(得分:2)

假设文件不是很大,最简单的方法可能是将整个文件读入一个字符串数组,修改你想要的那些字符串,然后将它们全部写回磁盘。

编辑:我确实有必要指出,除非你需要的内容超出你的问题所暗示的范围,sed可能比从头开始编写你自己的程序更好。