Как перезаписать структуру внутри файла с помощью C?

Я сохраняю структуру в файл .dat. Предположим, мне нужно отредактировать одну конкретную структуру, как мне поступить? Я сделал следующее:

ptFile = fopen("funcionarios.dat", "ab+");

fseek(ptFile, index*sizeof(strFunc), SEEK_SET); //places the pointer at the struct I want
fwrite(&newStruct, sizeof(strFunc), 1, ptFile); //adds the new struct

Итак, как видите, я хочу обновить свой файл с помощью newStruct.

Функции fwrite возвращают 1, но не заменяют строку, которую я хочу (ни соседние строки, если я использовал пропущенный индекс), и не добавляют новую структуру в файл. Это просто ничего не делать!

Любые идеи?

Я сделал это, прочитав все структуры, заменив index-struct моей новой структурой и записав файл со всеми структурами, но я ищу лучший способ сделать это.

Заранее спасибо.


person Renato Siqueira Massaro    schedule 13.06.2012    source источник
comment
Используя W+, не удалю ли я весь файл?   -  person Renato Siqueira Massaro    schedule 14.06.2012


Ответы (1)


fopen(.., "ab+") запрашивает режим добавления:

   a+     Open for reading and appending (writing at end of
          file).  The file is created if it does not exist.  The
          initial file position for reading is at the beginning
          of the file, but output is always appended to the end
          of the file.

Вероятно, вам нужен режим r+, который, как это ни парадоксально, также означает запись:

   r+     Open for reading and writing.  The stream is
          positioned at the beginning of the file.
person sarnold    schedule 13.06.2012
comment
@Renato w открывается для записи, тогда как r открывается для чтения, но w также усекает файл (устанавливает его размер равным 0 перед записью). Последнее различие является основным отличием между w+ и r+, которые открывают файл для чтения/записи. - person Jim Balter; 14.06.2012
comment
Мне приходится искать строку каждый раз, когда я использую fopen(). Я ненавижу интерфейс. :) - person sarnold; 14.06.2012