怎样将多个TStream类型的数保存到一个文件中,然后又从这个文件把它们分别读出来?高分相送!!!

Happyledian 2001-11-28 10:14:29
例如:
procedure Export;
var
ms1,ms2,ms3:TMemoryStream;
begin
ms1:= TMemoryStream.Create;
ms2:= TMemoryStream.Create;
ms3:= TMemoryStream.Create;
ClientDataSet1.SaveToStream(ms1);
ClientDataSet2.SaveToStream(ms2);
ClientDataSet3.SaveToStream(ms3);
...
保存Stream到文件'c:\temp.dat'
...

end;

procedure Import;
var
ms1,ms2,ms3:TMemoryStream;
begin
ms1:= TMemoryStream.Create;
ms2:= TMemoryStream.Create;
ms3:= TMemoryStream.Create;
...
从'c:\temp.dat'读出stream;
...
ClientDataSet1.LoadFromStream(ms1);
ClientDataSet2.LoadFromStream(ms2);
ClientDataSet3.LoadFromStream(ms3);

end;

请高手赐教!
...全文
92 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Happyledian 2001-11-28
  • 打赏
  • 举报
回复
是在export中吗?那import怎么写?
shinesi 2001-11-28
  • 打赏
  • 举报
回复
写错了
fs := TFileStream.Create('c:\temp.dat',fmOpenWrite);
Size := ms1.size;
GetMem(Buf,size);
ms1.read(Buf^,Size);
fs.write(Size,4);
fs.write(Buf^,size);
Freemem(buf);
Happyledian 2001-11-28
  • 打赏
  • 举报
回复
procedure Import;
begin
...
fs := TFileStream.Create('c:\temp.dat',fmOpenRead);
ms := TMemoryStream.Create;
fs.Read(Size,4);
GetMem(buf,size);
fs.Read(Buf,size);
ms.SetSize(Size);//运行时报错!如果不要此句,则下句出错!
ms.Write(Buf,size);
MainForm.CDataSet.LoadFromStream(ms);
Freemem(buf);
...
end;
Happyledian 2001-11-28
  • 打赏
  • 举报
回复
老兄我先调试一下.呵呵~~~
shinesi 2001-11-28
  • 打赏
  • 举报
回复
保存到文件中:先计算每一个内存块的大小,以两个字节来保存,

procedure Export;
var
ms1,ms2,ms3:TMemoryStream;
fs: TFileStream;
buf: PChar;
Size: DWord;
begin
ms1:= TMemoryStream.Create;
ms2:= TMemoryStream.Create;
ms3:= TMemoryStream.Create;
ClientDataSet1.SaveToStream(ms1);
ClientDataSet2.SaveToStream(ms2);
ClientDataSet3.SaveToStream(ms3);
...
保存Stream到文件'c:\temp.dat'

fs := TFileStream.Create('c:\temp.dat',fmOpenWrite);
Size := ms1.size;
GetMem(Buf,size);
ms1.read(Buf,Size);
fs.write(Size,4);
fs.write(Buf,size);
Freemem(buf);
Size := ms2.size;
GetMem(Buf,size);
ms2.read(Buf,Size);
fs.write(Size,4);
fs.write(Buf,size);
Freemem(buf);
Size := ms3.size;
GetMem(Buf,size);
ms3.read(Buf,Size);
fs.write(Size,4);
fs.write(Buf,size);
Freemem(buf);
...

end;

procedure Import;
var
ms1,ms2,ms3:TMemoryStream;
begin
ms1:= TMemoryStream.Create;
ms2:= TMemoryStream.Create;
ms3:= TMemoryStream.Create;
...
从'c:\temp.dat'读出stream;
按上面的顺序度出来
...
ClientDataSet1.LoadFromStream(ms1);
ClientDataSet2.LoadFromStream(ms2);
ClientDataSet3.LoadFromStream(ms3);

end;
Happyledian 2001-11-28
  • 打赏
  • 举报
回复
老兄,搞不懂.能不能给出例子,麻烦了.
scripting 2001-11-28
  • 打赏
  • 举报
回复
做一个自定义文件结构。第一个integer指示有n个stream,然后,随后n个integer表示各stream的size,随后就是第一个stream的首地址,.....比较麻烦但是很有实际意义。

5,402

社区成员

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

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