Текущий архив: 2009.03.29;
Скачать: CL | DM;
Вниз
Удаление записи типа record. Найти похожие ветки
← →
seferot © (2009-02-03 15:01) [0]Здравствуйте!
Подскажите пожалуйста, как можно удалить запись типа record в не типизированном файле. О том как писать, читать и перезаписывать с этим нет проблем, но как удалять?
← →
Anatoly Podgoretsky © (2009-02-03 15:14) [1]> seferot (03.02.2009 15:01:00) [0]
А говоришь нет проблем.
← →
Amoeba © (2009-02-03 15:43) [2]
> О том как писать, читать и перезаписывать с этим нет проблем,
> но как удалять?
Только читая и перезаписывая. При этом возможны варианты.
← →
Юрий Зотов © (2009-02-03 15:45) [3]> seferot © (03.02.09 15:01)
> как писать, читать и перезаписывать с этим нет проблем, но как удалять?
Чтобы что-то удалить из ЛЮБОГО файла, его как раз нужно перезаписать. А с этим, как Вы сказали, проблем нет.
← →
Anatoly Podgoretsky © (2009-02-03 15:48) [4]> Юрий Зотов (03.02.2009 15:45:03) [3]
Видимо нет, раз не удаляется.
← →
MsGuns © (2009-02-03 16:18) [5]>Юрий Зотов © (03.02.09 15:45) [3]
>Чтобы что-то удалить из ЛЮБОГО файла, его как раз нужно перезаписать.
Неужели ?
← →
DVM © (2009-02-03 16:19) [6]
> seferot © (03.02.09 15:01)
Введи в запись дополнительное поле "Удалена". При чтении записей из файла, пропускай те у которых пометка "Удалена". Можно еще в первую очередь писать новые записи на место удаленных. Правда, возможно, в этом случае файл будет занимать место несколько большее, чем в нем реально полезной информации, но это тоже не страшно - надо лишь в программе сделать функцию - упаковать базу.
Если все описанное выше сложно, то придется полностью перезаписывать файл.
← →
clickmaker © (2009-02-03 16:39) [7]> как можно удалить запись типа record в не типизированном
> файле
найти смещение записи в файле
поставить указатель файла на смещение + размер записи
прочитать файл до конца
вернуть указатель на смещение записи в файле
записать прочитанный кусок файла
это если непосредственно в файле, к тому же будет неэффективно при удалении нескольких записей.
Если же файл полностью засосан в память, да и записей нужно удалить несколько, то проще удалить в памяти и перезаписать
← →
Юрий Зотов © (2009-02-03 17:09) [8]> MsGuns © (03.02.09 16:18) [5]
Если Вам известен другой способ, был бы признателен за ликбез.
← →
seferot © (2009-02-03 17:43) [9]
> найти смещение записи в файле
> поставить указатель файла на смещение + размер записи
> прочитать файл до конца
> вернуть указатель на смещение записи в файле
> записать прочитанный кусок файла
Есть ли примерчик?
← →
Amoeba © (2009-02-03 18:04) [10]Ознакомьтесь с этим
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=843
и затем, пользуясь справкой сможете сами написать такой примерчик. И пользы будет больше, чем использовать готовенькое.
← →
MsGuns © (2009-02-04 09:59) [11]>Юрий Зотов © (03.02.09 17:09) [8]
>Если Вам известен другой способ, был бы признателен за ликбез.
Мой вопрос был совершенно серьезным. Многие СУБД (не только скл-серверные) при внесении изменений в таблицы (или метаданные) не переписывают ВЕСЬ файл БД, а лишь его "куски". Право, странно было бы если бы сервер, удаляя запись из какой-нибудь таблицы (или вставляя), переписывал бы весь файл БД, размеры которого могут достигать теребайтов и который может находиться физически на разных дисках и даже ПК. Хотя, надо учесть, что в БД несколько необычная по сравнению с ФС система организации данных.
← →
Юрий Зотов © (2009-02-04 12:21) [12]> MsGuns © (04.02.09 09:59) [11]
> надо учесть, что в БД несколько необычная по сравнению
> с ФС система организации данных.
Вот именно. В частности, удаляемая запись может и вовсе не удаляться, а только помечаться, как удаленная - и ее физическое удаление произойдет только при сжатии БД (backup и т.п.), что обнозначно сопрвождается все той же перезаписью файла. Причем, пометка эта может ставиться даже не в том файле, который хранит сами данные, а в совершенно другом, да каждый сервер может решать вопросы оптимизации по-своему - вплоть до работы с диском на физическом уровне.
Что же касается вставки и обновления записей, то к сабжу это не относится.
Продолжая Вашу логику, следовало бы начать с того, что файл - это всего лишь поименованная совокупность данных с определенной организацией и потому операцию удаления может и вовсе не поддерживать (например, с точки зрения программы, COM-порт - это тоже файл и работа с ним ведется через все те же файловые функции).
Но в данном случае речь идет о конференции "Начинающим" и самом обыкновенным дисковом файле. Поэтому в данном топике вряд ли уместно пускаться в пространные рассуждения о том, что есть файл вобще и как с ним можно работать вообще - поскольку это приведет лишь запудриванию мозгов человеку, который задал простой конкретный практический вопрос и хотел бы получить на него простой конкретный практический ответ.
А уж всяческого рода загибания пальцев здесь и тем более неуместны. Причем, насколько помню, Вы и сами придерживаетесь этой же точки зрения - по крайней мере, на словах.
← →
MsGuns © (2009-02-04 12:49) [13]Юрий, ни о каком "загибании пальцев" и мысли не было.
Вы употребили слово "любой" и даже для усиления выделили его. Учитывая, что к Вашим постам здесь отношение особенное, я и задал вопрос.
ИМХО, Вы ответили правильно в отношении БОЛЬШИНСТВА файлов FAT-32, за обновление который "отвечает" сам винда. Однако в ОБЩЕМ случае Ваше УТВЕРЖДЕНИЕ неверно. И ссылаться на то, что новичку и не нужны "лишние" детали по-моему некорректно.
← →
Юрий Зотов © (2009-02-04 13:03) [14]> MsGuns © (04.02.09 12:49) [13]
Не будем спорить. Позволю себе лишь заметить, что было бы совсем неплохо, если бы текст поста [5] был не таким, коков он есть, а состоял из второго абзаца поста [13] (без последнего предложения) и, в качестве примера, текста поста [11] (без первого предложения).
Это позволило бы избежать ненужного...
:о)
← →
Ega23 © (2009-02-04 13:15) [15]
> Однако в ОБЩЕМ случае Ваше УТВЕРЖДЕНИЕ неверно.
Что-то я не догоняю, каким образом оно может быть неверно.
Разве только в случае написания собственного менеджера по работе с файловой системой (да и то не факт). Что выглядит, мягко говоря, несколько экстравагантным не только в рамках конференции "Начинающим", но даже и для "продвинутых"
← →
Anatoly Podgoretsky © (2009-02-04 14:34) [16]> Ega23 (04.02.2009 13:15:15) [15]
Например файл может быть ReadOnly и быть последовательным.
Страницы: 1 вся ветка
Текущий архив: 2009.03.29;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.048 c