Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Для новичков > BlockRead & BlockWrite |
Автор: artemiy 29.3.2007, 22:49 | ||
Использую BlockRead & BlockWrite для записи динамического массива записей в файл. Вот код:
И у меня вылетает ошибка на выходе из процедуры RestoreAll. Почему - не знаю :( Может кто подскажет где ошибка? |
Автор: VICTAR 29.3.2007, 22:52 | ||||
А где размер записи? По умолчанию он 128 байт
Добавлено через 3 минуты и 50 секунд Плюс при чтении указывай параметр, в который будет возвращаться кол-во прочитанных записей. Если ты не указываешь этот параметр, а кол-во прочтенных записей будет меньше размера буфера получишь исключение.
|
Автор: artemiy 29.3.2007, 22:58 | ||
Добавил... Теперь у меня следующее:
Работает почти без ошибок (на этот раз ошибка при закрытиии программы), но читает неправильно... З.Ы. Это мой первый опыт работы с BlockRead & BlockWrite. |
Автор: VICTAR 29.3.2007, 23:34 | ||
Можно работать с ShortString, например так
|
Автор: MetalFan 30.3.2007, 08:52 |
опять циклы... зачем? если размер записи заранее известен... |
Автор: artemiy 30.3.2007, 10:56 | ||
У меня проблема вообще вот в чем: надо записать несколько массивов рекордов в файл. Это динамические массивы разных рекордов, причем размер одинаковых рекордов не всегда совпадает. Решение я вижу таким: записывать в файл сначала размерность первого массива, затем записывать размер каждого элемента массива(размер рекорда) и собственно сам элемент(рекорд). Затем записывать размерность второго массива и его элементы с размерами. И т.д. Считывать я собираюсь так же: считал размерность массива, потом все его элементы... Записывать вроде бы получается, а вот считывать - нет (считывает фигню какую-то, см. скриншот). Где проблема - я не знаю :( |
Автор: MetalFan 30.3.2007, 11:49 |
эт как это на делфи такое сделать можно?! ![]() |
Автор: artemiy 30.3.2007, 12:51 | ||||||
![]()
Ну так я так и делаю )) Вот код с комментами:
Но вот только я не пойму почему оно неправильно считывается... MetalFan, или ты имеешь в виду записывать еще и размерность каждого элемента записи? Т.е. записывать каждый элемент по отдельности, а не всю запись сразу... Если да, то, блин, геморно получается... Может быть стоит использовать вообще другой алгоритм? |
Автор: MetalFan 30.3.2007, 13:12 |
а! ну дык понятно... код и не будет работать, если использовать длинные строки. да и вообще код написан с грубейщими ошибками. а записывать размерность каждой записи - это лишнее, они всегда одинаковые будут) |
Автор: artemiy 30.3.2007, 13:25 | ||||
А где именно? Буду исправлять.
А если елементами рекорда будут STringList'ы? |
Автор: MetalFan 30.3.2007, 13:35 | ||
беру слова обратно. просто есть некторые недочеты. эт с первого взгляда не так понял) и что? 4 байта в записи займет. как и любой другой наследник от TObject |
Автор: artemiy 30.3.2007, 14:29 | ||
Даже если в этом TStringList'е будет текста на несколько килобайт? |
Автор: artemiy 30.3.2007, 16:28 | ||
Немного переделал код:
И все равно считывается неправильно... ![]() ![]() |
Автор: VICTAR 30.3.2007, 17:46 | ||
Не знаю, стоит ли игра свеч ![]()
|
Автор: artemiy 31.3.2007, 19:27 |
Спасибо! ![]() |