Как я могу редактировать текстовый файл в C простым способом? - PullRequest
0 голосов
/ 27 марта 2012

У меня следующий код на 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 ]

4 голосов
/ 27 марта 2012

Даже если бы был способ «перемотать на предыдущую строку», ваш подход не сработал бы вообще. Это будет работать только в том случае, если вы заменяете линию точно такой же длины. (Вы можете сделать это для вставки строк короче, чем оригинал, с добавлением пробелов, но не для того, чтобы вставить больше данных, чем было изначально.)

Создайте новый файл, скопируйте туда все (изменяя по своему усмотрению) и замените оригинал после успешного завершения.

В качестве альтернативы, прочитайте файл в памяти (модифицируя по мере необходимости) и перезаписайте оригинал.

Вы не можете «вставить» что-то в середину файла без чего-либо подобного выше.

2 голосов
/ 27 марта 2012

Предполагая, что файл не очень большой, проще всего, вероятно, прочитать весь файл в массив строк, изменить те строки, которые вам нужны, а затем записать их все обратно на диск.

Edit: я чувствую себя обязанным отметить, что, если вам не нужно совсем немного того, что предлагает ваш вопрос, sed может быть лучшим выбором, чем написание вашей собственной программы с нуля.

...