для одной и той же позиции в одно и то же время различными процессами также является проблемой; ОП может использовать один и тот же метод для решения обеих проблем.

у открыть файл в режиме «a + b», т. Е. Если он не существует, он создается автоматически, но если это так, я не хочу его перезаписывать. Я хочу иметь возможность читать и писать в файл.

Файл является двоичным, и я хочу сохранить записи конкретногоstruct в этом. Так я хочу сделатьfseek() к записи, которую я хочу, а затем сохранить запись с помощьюfwrite().

Код выглядит следующим образом (MyRecord этоtypedef кstruct, покаFILENAME это#define на имя файла):

int saveRecord(MyRecord *pRecord, int pos)
{
    FILE* file = fopen(FILENAME, "a+b");
    if (file == NULL)
    {
        printf("Unable to open file %s\n", FILENAME);
        return 0;
    }

    fseek(file, pos * sizeof(MyRecord), SEEK_SET);
    fwrite(pRecord, sizeof(MyRecord), 1, file);
    fclose(file);
    return 1;
}

Однако этот код просто добавляет запись в конец файла, даже если я установилpos до 0. Почему нетfseek() с участиемSEEK_SET работает в режиме добавления?

Я знаю, что могу просто открыть его с помощью «r + b» и, если он не получится, открыть его с помощью «wb», но я хочу знать, почему это не работает и почемуfseek() с участиемSEEK_SET оставляет указатель файла в конце. Любые ссылки на места, где это поведение задокументировано, приветствуются (потому что я не смог их найти или я использую неправильные ключевые слова)

Ответы на вопрос(3)

Ваш ответ на вопрос