![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение в TMemoryStream [D7, WinXP]
k@rt © (2005-02-08 00:33:00)Допустим есть у меня вот такая вот запись:
TMExIt = (it1, it2, it3);
TMEx = packed record
A: String;
B: String;
C: TMExIt;
end;
TMR = packed record
A: string;
B: Boolean;
C: string;
D: string;
E: string;
F: string;
G: string;
H: TDate;
L: Boolean;
M: TDateTime;
O: Boolean;
Ex: array[0..255] of TMEx;
NextRecordSize: Integer; // Размер записи следующей
end;
И вот это я сохраняю: TMemoryStream.Write. Размер записи SizeOf(Переменная).
Считываю: TMemoryStream.Read. Размер записи беру из NextRecordSize. Если все String заменить на String[n], то есть фиксированого размера, то все работает, а если String то нефига.
Почему и как мне сохранять запись такого типа?
Digitman (2005-02-08 08:44:00) [1]
> как мне сохранять запись такого типа?
"одним махом" - никак.
придется поля обрабатывать по отдельности каждое
для переменных (или полей записи) типа ansistring :
var
s: string;
l: Integer;
..
//сохранение в поток
l := length(s);
stream.writebuffer(l, sizeof(l));
stream.writebuffer(pchar(s)^, l);
//восстановление из потока
stream.readbuffer(l, sizeof(l));
setlength(s, l);
stream.readbuffer(pchar(s)^, l);
Gero (2005-02-08 00:35:00) [2]
> Почему
string + F1
> как мне сохранять запись такого типа?
Ты же сам себе ответил:
> все String заменить на String[n], то есть фиксированого
> размера