LINUX.ORG.RU

fseek & fputc & ftell


0

0

Здравствуйте! Занимаюсь заполнением файла и столкнулся со следующей проблемой: необходимо в конце файла пропустить место под стркутурку, записать данные, а потом вернуться и вписать структурку в оставленное место. С помощью ftell запомнил место, куда буду сохранять структурку, с помощью fseek пропустил место. Начинаю по байтам формировать и записывать данные. После первого же вызова fputc функция ftell начинает возвращать позицию, как будто я не сдвигался в файле функцией fseek и не оставлял места. Хотя до первого вызова смещение в файле правильное. Файл отркыт с опцией "ab". Кто-нибудь может подсказать решение? Заранее спасибо!:)

Ответ на: комментарий от const86

в таком случае у меня удалится содержимое файла при открытие. Мне нужна именно дозапись в конец файла. Или я ошибаюсь?

codergeneration
() автор топика
Ответ на: комментарий от codergeneration

``r+" Open for reading and writing. The stream is positioned at the beginning of the file.

``w" Truncate to zero length or create text file for writing. The stream is positioned at the beginning of the file.

hizel ★★★★★
()
Ответ на: комментарий от codergeneration

>в таком случае у меня удалится содержимое файла при открытие. Мне нужна именно дозапись в конец файла. Или я ошибаюсь?

Тогда просто a+

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от Boy_from_Jungle

w+ Open for reading and writing. The file is created if it does not exist, otherwise it is truncated. То есть мне затрут файл, когда я начну его так открывать.

a - я пробовал. С ним у меня как раз и не получилось.

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. А тут вообще что-то непонятное. Никогда не обращал внимания, но из этого получается, что есть две позиции в файле: позиция чтения и позиция записи??

b - мне надо, чтобы была возможность без проблем читать и писать бинарные данные

wb - fseek за конец файла ведет себя так, как надо, но затирается файл при открытии, что не есть хорошо.

codergeneration
() автор топика
Ответ на: комментарий от codergeneration

имхо при a+ seek устанавливает позицию только для чтение, на запись не влияет, все что вы пишете добавляется в попу файла

так что ваш выбор r+b : )

hizel ★★★★★
()
Ответ на: комментарий от codergeneration

>А тут вообще что-то непонятное. Никогда не обращал внимания, но из этого получается, что есть две позиции в файле: позиция чтения и позиция записи??

нет, это эквивалетно open(..,O_RDWR|O_CREAT|O_APPEND,..)

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от codergeneration

> b - мне надо, чтобы была возможность без проблем читать и писать бинарные данные

емнип b нужно только в виндавсе. для переносимости можно оставить. а так - не нужно.

zh
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.