![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
DFooz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 3.9.2006 Репутация: нет Всего: нет |
Как удалять из него информацию? Через поиск ничего не нашёл.
|
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
DFooz,
можно делать как минимум, двумя способами: 1. Скопировать из исхходного файла в файл-буфер все, что идет до удаляемого куска. Потом то же самое для куска после. Старый файл удалить. Новый переименовать и дать имя старого. 2. Без использования дополнительного файла. Сделать цикличесое копирование байтов справа налево на место удаляемых файлов. Поключаем #include <io.h> - самый низкий уровень При помощи функции int chsize(int handle, long size) обрезать файл до нужного размера. параметры для данной функции: handle - дискриптор файла. Чтобы ты не парился, используй просто функцию fileno(fp), где fp - указатель файла (FILE* ). size - новый размер в байтах. size = старый размер - размер удаляемого блока. старый размер можно узнать через функцию filelength(int handle) Handle - то же, что и для chsize() 2 способ проходит только для чистого С Возможно, я не прав, так что пусть меня поправят если что, но НЕТ стандартного метода для работы с потоками (файлами) в стиле С++, который позволил бы обрезать файл Это сообщение отредактировал(а) Kuvaldis - 2.11.2006, 19:41 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
DFooz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 3.9.2006 Репутация: нет Всего: нет |
понятно.
в текстовых тоже только 2 этих способа работают? Это сообщение отредактировал(а) DFooz - 2.11.2006, 20:01 |
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
DFooz,
в принципе да. Но в текстовых файлах возможны неявные преобразования, например, '\n' - в последовательность '\10', '\13', и обратно. Поэтому я бы открыл текстовый файл в бинарном режиме (это можно) и сделал бы так, как написано выше Это сообщение отредактировал(а) Kuvaldis - 2.11.2006, 20:15 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
хотелось бы понять по какому принципу удаляется инфа, тем не
менее если известен точный размер данных которые нужно оставить и удалить то пользуйся fseek(); |
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
codelord,
К сожалению, fseek() только перемещает указатель файла в нужное место и всё. Данные файла можно будет только переписать поверх или записать дальше в конец файла. А само удаление - см. мой первый пост. или вы что-то недоговорили ![]() Это сообщение отредактировал(а) Kuvaldis - 2.11.2006, 20:37 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
DFooz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 3.9.2006 Репутация: нет Всего: нет |
по номеру записи (файл записей) |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
наверно не договорил или не додумал имел ввиду что ездить по файлу удалять его, после чего собрать и перезаписать
похоже на твой вариант, есть еще мысль такая допустим есть файл old.txt со следующим содержимым: 123456789qwertyuiopasdfghjklzxcvbnm и мы знаем что символы которые надо удалить занимают позиции номер 10 11 12 13, нам надо удалить qwer, делаем так ![]()
думаю с массивом работать с произвольным доступом проще чем с файлом |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
я так понял , делается что то типа базы данных, и посоветую делать также как в DB в записи есть поле которое помечает что запись удалена,
а при архивации все записи помечаные как удаленые удаляются, скорость работы повышается + появляется возможность откатится ![]() Добавлено @ 22:48 codelord, а если файл в 100 мегабайт ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
т.е. всеравно не понял, ![]() приведи кусочек файла. Добавлено @ 22:50 ну наверно будет не быстро ![]() хотя тут надо уточнять и размер файла и потребности. |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
п.с. на моем скромном компьютере приблизительно 10 мегов в сек.
|
|||
|
||||
DFooz |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 3.9.2006 Репутация: нет Всего: нет |
ЧТо такое DB? Как примерно пометить? В новый файл записать, что хочу удалить? |
||||||
|
|||||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
извини может выразился не верно, я имел ввиду кусочек файла с которым надо работать,
т.е. из которого надо удалять. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
DataBase нет просто будешь находить в файле позицию и помечать как удаленную запись , а после всех действий или через время , допустим через неделю, будешь выкидывать все удаленые, для сохранения места на диске -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
DFooz |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 3.9.2006 Репутация: нет Всего: нет |
Romikgy
, понятно.
чего извиняться-то=) что-то типа такого: Петя диск 1 19.04.2006 такая структура
Это сообщение отредактировал(а) DFooz - 2.11.2006, 23:44 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |