Текущий архив: 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.45 MB
Время: 0.011 c