来自IOHandler.ReadStream的Memo1.Lines.LoadFromStream

时间:2013-08-05 13:17:24

标签: delphi

我试图将发送的文本文件显示到memo.lines而不将其保存到磁盘

来自服务器

  try
  Ms := TMemoryStream.Create;
  Ms.LoadFromFile('update.txt');
  Ms.Position := 0;

  AContext.Connection.IOHandler.LargeStream := True;
  AContext.Connection.IOHandler.Write(Ms, 0, True);
  finally
    Ms.Free;
  end;

到客户端...我不知道如何在客户端

中执行此操作
  try
   Ms := TMemoryStream.Create;
   Ms.Position := 0;

   IdTCPClient1.IOHandler.LargeStream := True;
   IdTCPClient1.Connection.IOHandler.ReadStream(Ms, -1,false);

 finally
   Memo1.Lines.LoadFromStream(Ms);
   Ms.Free;
 end;

有人可以帮助我如何做到这一点吗?

2 个答案:

答案 0 :(得分:3)

您的代码很好,您只是忘记在调用Memo的Position方法之前将流的LoadFromStream()属性重置为0:

IdTCPClient1.Connection.IOHandler.ReadStream(Ms, -1,false);
Ms.Position := 0; // <-- add this
Memo1.Lines.LoadFromStream(Ms);

答案 1 :(得分:0)

如果我是你,我仍然会缓冲读取的数据,原因有两个:

  • 网络流是单向且不可定位的因此不是真正的文件。 (是的,这也意味着,每次收到一些新数据时,您必须手动/以编程方式刷新它。)
  • 如果连接失败,读取缓冲区可能会被乱码填充,因为在重定向备忘录输入后,您无法再控制显示的内容。

如果您不想将发送的数据保存到磁盘,您仍然可以将其保存到 TMemoryStream 实例,该实例可用作备忘录的参数。 .LoadFromStream()方法。