您的位置:首页 > 其它

怎样将TMemoryStream附值给一个string类型

2011-12-16 13:53 190 查看
转自:http://www.100test.com/html/537/s__D4_F5_D1_F9_BD_ABTMem_537682.htm

var

s:TMemoryStream;

str:string;

begin

ClientDataSet1.SaveToStream(s,dfXML). //但怎样将s附值给str.(str:=s)

str := PChar(s.Position). 或:

with s do

begin

setlength(str, size).

Positon := 0.

Read(PChar(str)^, size).

end.

不好意思写错了,是str := PChar(s.Memory). 不过str := PChar(s.Memory).这样很危险,如果TMemoryStream 中不是以#0结束,或是字符串中间有#0的话,这样转换就会出错,还是用第二种方法保险.用move方法,并且在字符串结尾加上#0用move还不如直接 用TMemoryStream.Read方法,只要不转换成pchar就不用加#0下面算是标准的,

我经常看delphi vcl源码,borland是用的类似写法

SetLength(str, memoryStream.size)

memoryStream.Positon := 0.

memoryStream.Read(Pointer(str)^,memoryStream.size)

跟我的第二种方法是一样的呀这种方法有个缺点就是重新分配了内存,如果不想重新分配内存的话,直接用Memory指针好了.。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐