Tstringstream求助

zjxsw 2010-08-15 08:44:43
s.Tstringstream.creat();
IdHTTP1.Get( 'http://xxx/xxx.* ',s);

每做一次get,s.DataString内容就会增加。
有没有方法,比如clear,清空Tstringstream?
...全文
619 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kye_jufei 2010-08-15
  • 打赏
  • 举报
回复
嗯,這樣也可:(使用TIdhttp.get方法+Thread更好)...


procedure ThreadDown.Execute;
var
str:TMemoryStream;
begin
str:=TMemoryStream.Create;
try TIdhttp.Get(TUrl,str);
str.SaveToFile(TName);
if TAuto='True' then
ShellExecute(0,'Open',PChar(TName),nil,nil,SW_SHOW);
str.Free;
TIdhttp.Free;
finally
end;
end;
老之 2010-08-15
  • 打赏
  • 举报
回复
TIdHTTP.Get方法,是可以把收到的内容放到字符串或者TStringList对象里面,不一定是TStream。就算要用TStream,用TMemoryStream也比TStringStream好用
zjxsw 2010-08-15
  • 打赏
  • 举报
回复
只能用creat了!

在一个大循环里,用creat和free不是很费时间吗?有没有更好的思路?
kye_jufei 2010-08-15
  • 打赏
  • 举报
回复
可使用try ...finally...end + Free就可以了...(舉例如下):
1.
procedure TForm1.Button3Click(Sender: TObject);
var
StringStream: TStringStream;
str,strHex: string;
begin
if Length(BytesGB18030) < 1 then Exit;

{直接根据字节数组建立 TStringStream}
StringStream := TStringStream.Create(BytesGB18030);
{TStringStream.DataString 就已经是标准的 string}
str := StringStream.DataString;

Memo1.Lines.Add(StringStream.DataString);
Memo1.Lines.Add(ToHex(@StringStream.Bytes[0], Length(StringStream.Bytes)));
Memo1.Lines.Add('');
Memo1.Lines.Add(str);
Memo1.Lines.Add(ToHex(@str[1], ByteLength(str)));
StringStream.Free;
end;


2.
function ComponentToStr(AComponent: TComponent): string;
var
BinStream: TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(AComponent);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result := StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;


3.
function StrToComponent(const Value: string;
Instance: TComponent): TComponent;
var
StrStream: TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result := BinStream.ReadComponent(Instance);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;

老之 2010-08-15
  • 打赏
  • 举报
回复
重新创建TStringStream对象就可以清空了
zjxsw 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kye_jufei 的回复:]
嗯,這樣也可:(使用TIdhttp.get方法+Thread更好)...

[/Quote]

哈,谢了。我不是要保存到文件。我只是取得字符串,进行比较。

get好像不能直接放到字符串变量吧?

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧