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