2016-05-27 2 views
1

я имею немного головной боли с этим кодом:C Файлы triying перезаписать

FILE usuaris* 
.... 

usuaris=fopen("usuarisfinal.txt","a+b"); 
fseek(usuaris,(pos-1)*sizeof(Tusuari),SEEK_SET); 
fwrite(&usuaux,sizeof(Tusuari),1,usuaris); 

Что я хочу сделать, это перезаписать Tusuari регистрироваться «usuaux» в положении «поз», но я в конечном итоге добавляю «usuaux» в конец файла. Я знаю, что изменение режима «a + b» на «r + b» я могу делать то, что хочу, но я не совсем понимаю, почему я не могу заставить его работать таким образом!

P.S. Извините за возможные ошибки, английский для меня - это третий язык!

+0

вы открыли файл с 'a' (append)', поэтому все операции записи будут добавлены в файл. Это корень проблемы. Использование «режима» Read Plus Binary :(«r + b») говорит: 1) Я хочу прочитать файл. 2) Я хочу записать файл в текущий индикатор положения файла. и 3) Я хочу выполнять все операции чтения и записи с использованием «двоичных» (без специальной обработки строк перевода строк и т. д. Также не хочу использовать «w + b», поскольку открытие для 'write' приведет к усечению файла во время 'fopen()' – user3629249

ответ

3

Когда вы открываете файл с режимом "a+", записи всегда будут идти в конец файла.

С man page для fopen:

а + Открыть для чтения и дописывания (записи в конец файла). Файл создается, если он не существует. Начальная позиция файла для чтения находится в начале файла, но вывод всегда добавляется в конец файла.

При открытии файла в этом режиме установка смещения влияет только на чтение. Поэтому использование режима "r+" - это то, что вы хотите.

Смежные вопросы