Переписать строки в файле - PullRequest
2 голосов
/ 02 июля 2011

Мне нужно переписать символ в файле или удалить несколько строк. Есть ли способ добиться этого без перезаписи всего файла?

Пример: мне нужно изменить символ "8" в строке 10 на символ "4".

pollo
ciao fred
98/98/34 42ddw
4
10
1234567890
cristo
ciao liby
98/98/34 fre42ddw
8
20
12345678901234567890

Ответы [ 3 ]

2 голосов
/ 02 июля 2011

Вы можете использовать fseek и fputc, если точно знаете положение символа.Если нет, лучше сначала fread файл и найти нужную позицию.Для других служебных функций см. <stdio.h>.

Обратите внимание, что <stdio.h> основан на байтах, а не на строках.При использовании линейных методов вам в основном нужно переписать файл.

Для удаления строки из файла вы, , можете просто перевести все символы из позиций i + [end of the line to be deleted] + 1 в позицииi + [start of the line to be deleted].Или прочитайте целое в буфер и манипулируйте там символами.Но для такой задачи больше подходят строчные функции.

2 голосов
/ 02 июля 2011

Короче говоря, да, вы можете изменять данные в произвольных позициях в файле, используя методы с произвольным доступом API .Конечно, то, как ОС и файловая система справляются с этим за кулисами, может в любом случае привести к перезаписи всего файла.

2 голосов
/ 02 июля 2011

Посмотрите на

int fseek (stream, offset, origin);

Вы можете перейти к определенному смещению и написать там символ.Но чтобы найти смещение символа для замены, вам все равно нужно прочитать все символы перед ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...