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

Вниз

Как прочитать строку из MemoryStream?   Найти похожие ветки 

 
Voldemar ©   (2002-09-27 04:19) [0]

Доброе время суток!
Объясните мне, плз, как прочитать строку из MemoryStream...

имеется примерно такой код:
var MST: TMemoryStream;
str: string;
begin
...
str:="бла-бла";
MST.Position:=0;
MST.Write(str, Length(srt);
end;
...
begin
MST.Position:=0;
MST.Read(str,MST.Size);
end;


В строке получается абсолютная ерунда, которую я туда, что характерно, не назначал:)). Как же выволочь полезные данные?


 
kerk   (2002-09-27 05:22) [1]

примерно так:
var
S1, S2: String;
MemStream: TMemoryStream;
begin
MemStream := TMemoryStream.Create;
try
S1 := "Caramba !!!"; //Имеем стринг S1
MemStream.Position := 0;
MemStream.WriteBuffer(Pointer(S1)^, Length(S1)); //Пишем S1 в Stream
MemStream.Position := 0;
SetString(S2, nil, MemStream.Size);
MemStream.Read(Pointer(S2)^, MemStream.Size); ////Читаем из Stream и пишем в S2
ShowMessage(S2);
finally
MemStream.Free;
end;
end;


 
Voldemar ©   (2002-09-27 06:13) [2]

Благодарю! Все работает.
Только вот непонятно, почему без SetString не работает...


 
MBo ©   (2002-09-27 06:28) [3]

Чуть другой вариант
SetLength(S2, MemStream.Size);
MemStream.Read(S2[1], MemStream.Size);


>Только вот непонятно, почему без SetString не работает...
Потому что строка пустая, при чтении в нее можешь получить AV


 
Voldemar ©   (2002-09-27 06:48) [4]

>MBo © (27.09.02 06:28)

> Потому что строка пустая, при чтении в нее можешь получить AV

Так в том-то и дело, что AV нет. Просто в строке какая-то лабуда... Но в принципе вопрос решен, это я уже так, по инерции. Не люблю непонятного :)).


 
MBo ©   (2002-09-27 07:00) [5]

строка ansistring устроена так - по адресу -4 хранится ее длина.
Если не установить длину, и записать какие-то данные, то строка о них ничего не знает. Более того, при этом можно выйти за пределы блока памяти, отведенного программе - тогда будет AV



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
4-21312
madcap
2002-08-09 22:45
2002.10.07
Как отправить письмо на SMTP?


14-21270
Елена
2002-09-12 08:13
2002.10.07
Ошибки в Интернете


1-20993
Демонов Е.В.
2002-09-26 17:40
2002.10.07
КАК иЗ Цветного bitmap-a сделать дизейболный Bitmap?


7-21288
Roman333
2002-07-30 10:39
2002.10.07
Как создать exe-шник который работает с командной строкой?


7-21294
sergn
2002-07-27 11:54
2002.10.07
Как перехватить событие открытия лотка CD-привода?