Главная страница
    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.45 MB
Время: 0.012 c
1-1142582478
roose
2006-03-17 11:01
2006.04.23
Root node in TreeView


2-1144185516
ValliGRoB
2006-04-05 01:18
2006.04.23
OpenFile


15-1143882529
Marser
2006-04-01 13:08
2006.04.23
Весна...


2-1144315983
Sergio77
2006-04-06 13:33
2006.04.23
mysql доступ


15-1143818149
antonn
2006-03-31 19:15
2006.04.23
Ну вот, продали дельфи...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский