Главная страница
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.078 c
6-1129828797
Windows
2005-10-20 21:19
2006.04.23
Отправить сообщение на ICQ


2-1144363672
yura32
2006-04-07 02:47
2006.04.23
Nebolshoi vopros


15-1143862359
Pazitron_Brain
2006-04-01 07:32
2006.04.23
Почему этот скрипт не отображает результат?


5-1130274979
Anarki
2005-10-26 01:16
2006.04.23
Можно ли скреститьTreeView с Fields Editor


15-1143746621
Yanis
2006-03-30 23:23
2006.04.23
Хорошая прога :)