Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

Проблема с нетипизированным файлом   Найти похожие ветки 

 
Gamer   (2006-04-08 00:20) [0]

Программа - что-то похожее на адрессную книгу.
Несколько текстовых полей, неопределенной заранее длинны. Это на одного человека.
Если делать запись одна за одной - программа работает нормально. Но если я хочу изменить не последнюю

запись, то делаю вот так:

все записи хранятся в MS:TMemoryStream;
адресса всех записей хранятся в конце файла, в другом TMemoryStream. Я их загружаю в adreslb:TListBox
создаю временное хранилище tempMS:TMemoryStream для дальнейшей работы с записями
создаю временное хранилище res:TMemoryStream для каждого текстового поля

res:=tmemorystream.Create;
TempMS:=tmemorystream.Create;
ms.Seek(0,sofrombeginning);

if pos>1 then begin //если запись первая - копирую предыдущие в TempMS
TempMS.CopyFrom(ms,ishowpos(pos)); //ishowpos(pos) возвращает позицию конца предыдущей записи
end;

дописываю информацию со всех полей в  TempMS

if pos<lastrecord then begin //если запись не последняя - копирую все записи полсе текущей в TempMS

 ms.Seek(ishowpos(pos+1)+1,sofrombeginning); //ishowpos(pos+1)+1 возвращает адресс начала следующей записи

 delta:=TempMS.Position-ishowpos(pos+1); //определяю смещение всех записей

 for i:=pos to Adreslb.Items.count-1 do begin
   Adreslb.Items[i]:=inttostr(strtoint(Adreslb.Items[i])+delta); //изменяю адреса записей в adreslb
 end;
 TempMS.CopyFrom(ms,ms.size-(ishowpos(pos+1)+1)); //дописываю следующие (после текущей) записи
end;

Так вот, если я добавлю информацию в каком-нибуть из полей не последней записи (цже сохраненной), то,

после сохранения, файл не загружается.
А если я удалю информацию, то выводит ошибку "Stream Read Error".
Подскажите, пожалуйста, как решыть эту проблемму.
Заранее благодарен.


 
Eraser ©   (2006-04-08 00:39) [1]


> Gamer   (08.04.06 00:20)

1. Для таких целей целесообразнее использовать TFileStream.
2. Получше изучи свойства наследников класса TStream, в частности Position и Size и как на них влияют методы Read, Write и CopyFrom.


 
Gamer   (2006-04-08 13:56) [2]


> 1. Для таких целей целесообразнее использовать TFileStream.

Я находил где-то, что TMemoryStream - быстрее. Напишите, почему именно TFileStream?
Заранее благодарен.



Страницы: 1 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
3-1141232888
-Саша-
2006-03-01 20:08
2006.04.23
Создание БД в FireBird


9-1128284221
Ricks
2005-10-03 00:17
2006.04.23
Многопроходная отрисовка ландшафта


3-1140869588
ViktorZ
2006-02-25 15:13
2006.04.23
Засунуть все в одну таблицу:


15-1143805947
oldman
2006-03-31 15:52
2006.04.23
Бывают же такие руки...


6-1136763104
Pasha13
2006-01-09 02:31
2006.04.23
перехват сообщений Outlooka