Я хочу открыть файл в режиме «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
оставляет указатель файла в конце. Любые ссылки на места, где это поведение задокументировано, приветствуются (потому что я не смог их найти, или я использую неправильные ключевые слова).