如何把TMemoryStream数据流读入到字符数组?(100分)

  • 主题发起人 主题发起人 almeidar
  • 开始时间 开始时间
A

almeidar

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用TMemoryStream将一个结构体数组存入数据库,结构体数组如下:
pdata = record
id : String[20];
value : String[20];
end;

var
p : array of pdata
//动态数组
ms : TMemoryStream;
begin
...
setlength(p,200);
...
ms.write(p,length(p));
//ms中的数据为非纯文本,如果我要从ms中再导入p数组中,使用ms.read好象没有任何
的作用。
请大家帮助!
 
代码:
 Srm := TMemoryStream.Create;
 try
   Strm.WriteBuffer(p,Length(p));
 finally
   Strm.free;
 
写到数据库可以采用
代码:
Tblobfield(ADODataSet.FieldByName('FieldName')).LoadFromStream(Strm);
 
ms.write(p,length(p)*sizeof(pdata));
 
我做了测试,使用TMemoryStream.Write方法可以将pData的数据写入流中,
但是TMemoryStream.Read方法和ReadBuffer一点作用都没有,无法写回pData中。
继续关注!
 
注意设置TMemoryStream.Position
TMemoryStream.Write后Position=Size - 1
Read时应该先Positon := 0
 
iamcaca老兄,请况确实如此,我的代码如下:
var
p,t : array of pData;
begin
setlength(p,200);
setlength(t,200);
tmpMemoryStream:=TMemoryStream.Create;
tmpMemoryStream.Write(pData,SizeOf(p)*Length(pData));
tmpMemoryStream.Position:=0;
tmpMemoryStream.Read(pData,SizeOf(t)*Length(tData));
ShowMessage(tData[0].ParamID);//这里没有任何数据
还请指教。
 
请贴pData的定义
 
//修改如下:
var
p,t : array of pData;
tmpMemoryStream : TMemoryStream;
begin
setlength(p,200);
setlength(t,200);
tmpMemoryStream:=TMemoryStream.Create;
try
p[0].id := '2020';
tmpMemoryStream.Write(p[0],sizeof(p) * SizeOf(pData));
tmpMemoryStream.Position:=0;
tmpMemoryStream.Read(t[0],sizeof(p) * SizeOf(pData));
ShowMessage(t[0].ID)
//显示出2020
finally
tmpMemoryStream.Free;
setlength(p,0);
setlength(t,0);
end;
end;
 
接受答案了,iamcaca能不能说明一下为什么要使用p[0]?
 
后退
顶部