![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
artemiy |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 22.2.2007 Репутация: нет Всего: нет |
Использую BlockRead & BlockWrite для записи динамического массива записей в файл.
Вот код:
И у меня вылетает ошибка на выходе из процедуры RestoreAll. Почему - не знаю :( Может кто подскажет где ошибка? |
|||
|
||||
VICTAR |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
А где размер записи? По умолчанию он 128 байт
Добавлено через 3 минуты и 50 секунд Плюс при чтении указывай параметр, в который будет возвращаться кол-во прочитанных записей. Если ты не указываешь этот параметр, а кол-во прочтенных записей будет меньше размера буфера получишь исключение.
|
||||
|
|||||
artemiy |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 22.2.2007 Репутация: нет Всего: нет |
Добавил... Теперь у меня следующее:
Работает почти без ошибок (на этот раз ошибка при закрытиии программы), но читает неправильно... З.Ы. Это мой первый опыт работы с BlockRead & BlockWrite. Это сообщение отредактировал(а) artemiy - 29.3.2007, 23:01 |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Можно работать с ShortString, например так
|
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
опять циклы... зачем? если размер записи заранее известен...
-------------------- There are always someone smarter than you... |
|||
|
||||
artemiy |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 22.2.2007 Репутация: нет Всего: нет |
У меня проблема вообще вот в чем: надо записать несколько массивов рекордов в файл. Это динамические массивы разных рекордов, причем размер одинаковых рекордов не всегда совпадает. Решение я вижу таким: записывать в файл сначала размерность первого массива, затем записывать размер каждого элемента массива(размер рекорда) и собственно сам элемент(рекорд). Затем записывать размерность второго массива и его элементы с размерами. И т.д. Считывать я собираюсь так же: считал размерность массива, потом все его элементы... Записывать вроде бы получается, а вот считывать - нет (считывает фигню какую-то, см. скриншот). Где проблема - я не знаю :( Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
эт как это на делфи такое сделать можно?! ![]() -------------------- There are always someone smarter than you... |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
MetalFan, злой ты человек ![]() ![]() Тем, что выравнял "рекорд". Мое дело предложить. только не забудь тогда записывать еще размер каждого эл-та записи(для строк) ![]() |
|||
|
||||
artemiy |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 22.2.2007 Репутация: нет Всего: нет |
![]()
Ну так я так и делаю )) Вот код с комментами:
Но вот только я не пойму почему оно неправильно считывается... MetalFan, или ты имеешь в виду записывать еще и размерность каждого элемента записи? Т.е. записывать каждый элемент по отдельности, а не всю запись сразу... Если да, то, блин, геморно получается... Может быть стоит использовать вообще другой алгоритм? Это сообщение отредактировал(а) artemiy - 30.3.2007, 12:53 |
||||||
|
|||||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
а! ну дык понятно...
код и не будет работать, если использовать длинные строки. да и вообще код написан с грубейщими ошибками. а записывать размерность каждой записи - это лишнее, они всегда одинаковые будут) -------------------- There are always someone smarter than you... |
|||
|
||||
artemiy |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 22.2.2007 Репутация: нет Всего: нет |
А где именно? Буду исправлять.
А если елементами рекорда будут STringList'ы? |
||||
|
|||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
беру слова обратно. просто есть некторые недочеты. эт с первого взгляда не так понял) и что? 4 байта в записи займет. как и любой другой наследник от TObject Это сообщение отредактировал(а) MetalFan - 30.3.2007, 14:00 -------------------- There are always someone smarter than you... |
|||
|
||||
artemiy |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 22.2.2007 Репутация: нет Всего: нет |
||||
|
||||
artemiy |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 22.2.2007 Репутация: нет Всего: нет |
Немного переделал код:
И все равно считывается неправильно... ![]() ![]() |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Не знаю, стоит ли игра свеч
![]()
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |