У меня есть следующая структура данных:
Type
TMyRecord=Record
Num:String[50];
ID:String[50];
End;
и у меня есть файл записи Как следующий:
Var
F:File of TMyRecord;
файл будет содержать много записей, как я могу удалить одну конкретную запись из файла.
Заранее спасибо .
Рассматривали ли вы использование встроенной БД, например, например. Вместо SQLite?
Я просто спрашиваю только о файлах, база данных - это не то, о чем я спрашиваю.
Если запись находится в самом конце файла, вы можете просто обрезать размер файла, чтобы опустить запись.
В противном случае единственный способ удалить запись из начала/середины файла — это создать новый файл, скопировать существующие записи из старого файла в новый файл, исключив запись, которую вы хотите удалить, а затем заменить старый файл. с новым файлом.
Кажется, это самый простой способ, но я думал об использовании функции поиска или загрузке всех записей внутри списка, а затем удалении записи из списка и сохранении списка в файл. но не уверен в своих мыслях. :)
То, что вы описываете, в основном то же самое, что и я, только вы думаете о сохранении обновленного списка в существующий файл, тогда как я предлагаю вам сначала сохранить его в новый файл на случай, если что-то пойдет не так.
Обычный метод для записей фиксированного размера — удаление флага вместе с другими полями. В противном случае вам придется перезаписывать большие части файла или перетасовывать записи, чтобы удалить записи. Перезапись больших частей выполняется медленно, а перетасовка плохо работает для многопользовательского доступа.