2013-12-14 3 views
0

Как сделать fseek не перезаписывать то, что было в данной позиции при использовании с fwrite?Как вставить текст в файл с помощью fseek и fwrite

Я открываю файл с

file = fopen(filename, "r+"); 

, а затем использовать

fseek (file, pos, SEEK_SET); 

, чтобы перейти к позиции мне нужно, используя

fwrite(text, 1, text_size, file); 

для записи данных.

пример:

Скажем, я хочу добавить '7' в положении 3:

abcdef 

Я хочу, чтобы это было

abc7def 
+0

'fseek' ничего не пишет - вы можете уточнить свою проблему? –

+0

извините, уточнил ... – SkyRipper

+0

добавлен пример ... – SkyRipper

ответ

0

Вы не можете вставить файл. Единственный способ добиться этого - сохранить остальную часть файла где-нибудь, написать свой новый материал, а затем добавить остальную часть файла из того, где вы его сохранили. Но вам нужно переписать всю часть своего файла после того, что вы хотите вставить.

+0

Выполняйте все текстовые редакторы, сделанные человечеством, копируя файл, когда я делаю одно изменение символа? – SkyRipper

+0

Нет, они загружают файл в память, обрабатывают ваши изменения в памяти, а затем записывают (весь файл!) Обратно, когда вы выбираете сохранение. –

+0

есть ли какой-либо способ, на любом языке, даже в сборке? Мой файл будет сотнями мегабайт ... – SkyRipper

0

FSEEK ничего не будет перезаписывать , Вы можете перезаписать то, что находится в позиции, к которой вы стремитесь, если вы используете fwrite, fputs, fputc или аналогичную функцию после fseek.

+0

очень правильно, как этого избежать? – SkyRipper

+0

Чего вы хотите избежать? Перезапись после fseek? Тогда не используйте функцию, которая записывает в файл. Если у вас есть вопрос: как я могу записать любые функции записи в конец файла вместо положения, в котором вы используете fseek() ed для использования fseek (fp, 0, SEEK_END). –

+0

см. Пример выше – SkyRipper

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