Форум: "Начинающим";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];
Внизфокус с TMemoryStream) Найти похожие ветки
← →
maxim (2011-10-09 10:25) [0]
var m:TMemoryStream;
l:TStringList;
buf:string;
begin
m:=TMemoryStream.Create;
l:=TStringList.Create;
buf:="qwerty";
m.Write(buf[1],6);
l.LoadFromStream(m);
showmessage(l.Text);//а где строка?
l.Free;
m.Free;
end;
пишу строку в поток, после из потока гружу в стринглист, оппа, а строки уже и нет), подскажите, где наврал?
← →
Anatoly Podgoretsky © (2011-10-09 10:35) [1]> maxim (09.10.2011 10:25:00) [0]
L.Add("qwerty");
← →
maxim (2011-10-09 10:43) [2]
> Anatoly Podgoretsky
так не интересно, надо достать строку из потока, если она туда пишется, если не пишется, то разобраться почему не пишется.
← →
Anatoly Podgoretsky © (2011-10-09 10:49) [3]> maxim (09.10.2011 10:43:02) [2]
Что значит неиснтересно, у тебя это игра такая, результат вообще не
интересен?
← →
sniknik © (2011-10-09 10:49) [4]> почему не пишется.
m.Position:= 0;
← →
sniknik © (2011-10-09 10:53) [5]> это игра такая, результат вообще не интересен?
"оне" не ищут простых путей, т.к. уже считают себя профи, но еще не стали, не доросли до простых решений.
именно, что игра "в программиста".
← →
maxim (2011-10-09 10:55) [6]спасибо большое, теперь ясно
← →
_Юрий (2011-10-09 11:50) [7]
> maxim (09.10.11 10:55) [6]
Галка "Use debug .dcus" в опциях проекта позволяет заходить отладчиком внутрь стандартных модулей, и обретать таким образом ясность самостоятельно
← →
Cobalt © (2011-10-10 13:54) [8]Вариант 1)
называем писюm.Write(buf[1],6);
членомbuf:ansistring;
...
m.Write(buf[1],Length(buf)*SizeOf(ansiChar));
Вариант 2) надеваем презерватив:var m:TMemoryStream;
l:TStringList;
buf:string;
Encoding: TEncoding;
begin
m:=TMemoryStream.Create;
l:=TStringList.Create;
buf:="qwerty";
m.Write(buf[1],Length(buf)*SizeOf(Char));
m.Position := 0;
Encoding := TEncoding.Create;
try
l.LoadFromStream(m, Encoding.Unicode);
finally
Encoding.Free;
end;
showmessage(l.Text);
l.Free;
m.Free;
← →
Ega23 © (2011-10-10 14:09) [9]
Length(buf)*SizeOf(ansiChar)
Зачем?
← →
stas © (2011-10-10 14:34) [10]Ega23 © (10.10.11 14:09) [9]
Чтобы корректно работало на юникодной версии Delphi.
← →
Ega23 © (2011-10-10 14:46) [11]
> Чтобы корректно работало на юникодной версии Delphi.buf:ansistring;
...
m.Write(buf[1],Length(buf)*SizeOf(ansiChar));
← →
Andy BitOff © (2011-10-10 22:20) [12]> Ega23 © (10.10.11 14:46) [11]
> buf:ansistring;
А ну как завтра война? В военное время, знаешь чего...
;)
← →
Alex_C (2011-10-10 22:41) [13]
> пишу строку в поток, после из потока гружу в стринглист,
> оппа, а строки уже и нет), подскажите, где наврал?
Наврал вот здесь:
> l.LoadFromStream(m);
Так не правильно! Чтобы правильно было нужно чтобы запись в поток осуществлялась вот так:
m.Write(buf, Length(buf));
Сам столкнулся с такой же проблемой: дело в том, что при записи/чтении переменной типа String в поток происходит следущее: первым записывается/считывается размер String, а затем уже сама строка. В результате при
> m.Write(buf[1],6);
Записалось только содержание самой строки, а при
> l.LoadFromStream(m, Encoding.Unicode);
Считывается первый байт, затем размер m устанавливается равным первому считываемому байту, и туда записывается байты строки. Естественно что получается у тебя первый байт - не размер строки, а первый байт строки!
← →
Alex_C (2011-10-10 22:48) [14]Еще небольшое замечание на счет использования потоков: если есть необходимость записать в поток несколько переменных типа стринг, а потом их считать, делать нужно примерно так:
1. StrPCopy - из строк создаем массивы.
2. Записываем Размер первого массива, сам массив, размер второго массива, сам массив.
3. Считывание - как п.2.
Тогда никаких проблем при чтении/записи из Stream не возникает.
← →
Servy © (2011-10-11 03:32) [15]
> [13]
> Так не правильно! Чтобы правильно было нужно чтобы запись
> в поток осуществлялась вот так:
>
> m.Write(buf, Length(buf));
> buf:string;
Это типа вредных советов типа "разогрейте яйца в микроволновке"? Смайлики тогда ставьте, что ли.
> 1. StrPCopy - из строк создаем массивы.
А это новый тренд моды - чтобы что-то записать в поток, надо это что-то скопировать в памяти и положить в другое, более феншуйное место?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c