Форум: "Основная";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c