4

我试图将发送的文本文件显示到 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;

如果可能的话,谁能帮助我如何完成这项工作?

4

2 回答 2

3

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

IdTCPClient1.Connection.IOHandler.ReadStream(Ms, -1,false);
Ms.Position := 0; // <-- add this
Memo1.Lines.LoadFromStream(Ms);
于 2013-08-05T15:41:43.797 回答
0

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

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

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

于 2013-08-05T13:29:13.273 回答