Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Перезаписать содержимое файла на C

Автор вопроса: FrodoОтветов: 1

Я пытаюсь перезаписать содержимое файла, используя fwrite(), fseek() в C, но это не работает.

Размер файла 30. Я хочу написать "ABCD", перезаписав позицию 10 ~ 13 в файле. Поэтому я программирую ниже.

FILE *fp = fopen("file.txt", "a+");
fseek(fp, 10, SEEK_SET);
fwrite("ABCD", 1, 4, fp);

Но "ABCD" пишется после 30 позиции в файле. Я нашел несколько советов использовать двоичный режим (например, "ab+"), но 'b' игнорируется во всех системах, соответствующих стандарту POSIX.

Как я могу это сделать?

  • Почему вы открываете файл для добавления? Режим "a+" открывается для чтения и добавления. Используйте режим "r+". Weather Vane 19.05.2018
  • О, это хорошо работает при использовании r+. Благодарю вас! Frodo 19.05.2018
  • Для потоков, открытых в текстовом режиме, fseek имеет ограниченное применение, поскольку перевод каретки с переводом строки может привести к тому, что fseek приведет к неожиданным результатам. Weather Vane 19.05.2018
  • В режиме добавления все операции записи происходят в конец файла; нет способа расположить файл и записать в заданной позиции (используя функции FILE *; правила немного отличаются, если вы переходите к файловым дескрипторам и используете pwrite()). Jonathan Leffler 19.05.2018

cfopenfwritefseek

Ответы

Ответ 1 · рейтинг 1 · nandal

Используйте режим "r+", чтобы открыть файл вместо "a+" (b для двоичного файла является необязательным и практически неуместным в системах POSIX): -

#include <stdlib.h>
#include <stdio.h>

int main(void){
    FILE *fp = fopen("file.txt", "r+");
    fseek(fp, 10, SEEK_SET);
    fwrite("ABCD", 1, 4, fp);
    fclose(fp);

    return 0;
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы