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