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

Вниз

TFileStream & String   Найти похожие ветки 

 
BOA_KAA ©   (2003-09-04 12:54) [0]

Здравтвуйте еще раз!
Вопрос такой: как сохраняется строка в файле, если ее сохранять через TFileStream. Нужно сохранять таблицу TStringGrid со всеми сойствами.
Делаю это так (само содержание):

for ACol:=0 to Grid.ColCount-1 do
for ARow:=0 to Grid.RowCount-1 do
begin
temp:=Length(Grid.Cells[ACol,ARow]); // размер ячейки
fsFile.Write(temp, SizeOf(Integer)); // запись размера
St:=Grid.Cells[ACol,ARow];
fsFile.Write(St, temp); // содержание
end;


Далее открываю:

for ACol:=0 to Grid.ColCount-1 do
for ARow:=0 to Grid.RowCount-1 do
begin
fsFile.Read(temp, SizeOf(Integer)); // размер ячейки
fsFile.Read(St, temp); // чтение строки
Grid.Cells[ACol,ARow]:=St;
end;


Но! Читается содержимое первой записанной строки, а затем вываливаемся с Access violation. Пробовал просмотреть, что именно читается в виде первой строки - она читается нормально, затем трассировка дает Unaccessible value для строки.
Думал, что происходят потери, сверял значение temp и возвращаемое значение от Read - одинаковые.
Одиночное сохранение/чтение строки происходят идеально, но как только дело доходит до цикла - все рушится, причем даже try ... except ошибку не отлавливает.

Может там еще что-нибудь приписывается в конец строки при ее записи?


 
Skier ©   (2003-09-04 12:57) [1]

fsFile.Write(St[1], temp); // содержание

SetLength(St, temp)
fsFile.Read(St[1], temp); // чтение строки


 
MBo ©   (2003-09-04 12:58) [2]

fsFile.Write(St[1], temp);

fsFile.Read(temp, SizeOf(Integer)); // размер ячейки
setLength(St,Temp);
fsFile.Read(St[1], temp); // чтение строки


 
ZEE ©   (2003-09-04 12:58) [3]

тебе надо в файл сохранять Grid.ColCount, Grid.RowCount, и при открытии читать их из файла и устанавливать соотв. св-ва грида, а потом уж цикл...


 
Skier ©   (2003-09-04 12:59) [4]

>MBo © (04.09.03 12:58)
Кто у кого списал ? :)))


 
Palladin ©   (2003-09-04 12:59) [5]

procedure WriteString(p_Stream:TStream;p_strValue:string);
var
I:Integer;
begin
i:=Length(p_strValue);
p_Stream.Write(i,sizeof(i));
p_Stream.Write(p_strValue[1],i);
end;

procedure ReadString(p_Stream:TStream;var rp_strValue:string);
begin
p_Stream.Read(rp_strValue,Sizeof(Integer);
SetLength(rp_strValue,Integer(rp_strValue));
p_Stream.Read(rp_strValue[1],Length(rp_strValue);
end;

function fReadString(p_Stream:TStream):String;
begin
ReadString(p_Stream,Result);
end;


 
MBo ©   (2003-09-04 13:00) [6]

>Skier
Дык вечный FAQ ;))


 
Skier ©   (2003-09-04 13:01) [7]

>MBo © (04.09.03 13:00)
Да уж ! :)


 
BOA_KAA ©   (2003-09-04 13:04) [8]

ААААААААААААААА!!! Балван!!! Точно!!!

Спасибо ааааагромное!



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

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

Наверх




Память: 0.48 MB
Время: 0.014 c
3-48482
Алексей Петухов
2003-08-22 13:45
2003.09.15
Сохранить и Загрузить.


3-48437
denick
2003-08-24 04:03
2003.09.15
Помогите пожалуйста с SQL запросом.


3-48411
Bless
2003-08-20 12:27
2003.09.15
Unique и уникальный индекс


14-48746
Maxim Pshevlotsky
2003-08-27 08:16
2003.09.15
Пытаюсь нормально запустить KOL библиотеку.......


1-48604
Qwerr
2003-09-03 14:08
2003.09.15
Видео