Главная страница
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.073 c
15-1143065792
XeON
2006-03-23 01:16
2006.04.23
Немного C++ a


15-1144197219
Bogdan1024
2006-04-05 04:33
2006.04.23
Война и мир


2-1144140081
azl
2006-04-04 12:41
2006.04.23
Вкладка ActiveX в Delphi 2006


2-1144241480
Barmutik
2006-04-05 16:51
2006.04.23
Помогите с UpdateResource


2-1143750426
GrBob
2006-03-31 00:27
2006.04.23
Как сделать, чтобы форму нельзя было закрыть