【问题标题】:Delphi download file Android with Memory StreamDelphi 使用 Memory Stream 下载文件 Android
【发布时间】:2013-09-25 19:25:09
【问题描述】:

我正在尝试以这种方式从服务器下载文件:

var MeS:TMemoryStream;
begin
 Mes:=TMemoryStream.Create;
 IdFTP1.Connect;
 Mes.Position:=0;
  try
   IdFTP1.Get(Mes, 'dolcestilnovo.txt', True, False);
  finally
   MeS.Free;
   IdFTP1.Disconnect;
  end;
 Memo5.Lines.LoadFromStream(Mes);
end;

我必须在那个 Memo5 中显示 dolcestilnovo.txt 的内容,但是我在 IdFTP1.Get(); 方法上有一个错误。

错误提示“没有可以使用这些参数调用的 'Get' 的重载版本”。我能做些什么?

我想使用MemoryStream,因为我在安卓设备上下载它。

【问题讨论】:

  • 顺便说一句,您正在尝试使用释放的内存流的内容填充备忘录。
  • 那我怎样才能下载那个文件呢?
  • 据我所知,Get(string,TStream,boolean) 是这里使用的重载。
  • 你的Mes.Position:=0 在那里毫无意义。这是一个空流!
  • Mes.Free 也放错了地方。您在将流加载到备忘录之前释放它。

标签: android delphi indy delphi-xe5


【解决方案1】:

TStream版本TIdFTP.Get()的签名:

procedure Get(const ASourceFile: string; ADest: TStream; AResume: Boolean = false); overload;

看看为什么你的代码不匹配?改用这个:

IdFTP1.Get('dolcestilnovo.txt', Mes, False);

在调用Memo5.Lines.LoadFromStream(Mes) 之前不要忘记将TMemoryStream.Position 重新设置为0,否则它不会加载任何内容。

试试这个:

var
  MeS: TMemoryStream;
begin
  Mes := TMemoryStream.Create;
  IdFTP1.Connect;
  try
    IdFTP1.Get('dolcestilnovo.txt', Mes, False);
  finally
    IdFTP1.Disconnect;
  end;
  Mes.Position := 0;
  Memo5.Lines.LoadFromStream(Mes);
end;

【讨论】:

  • 所以当我结束 try-catch 语句时,我放了一个 Mes.Position:=0 ?
  • 内存流不是必须要释放的吗?
  • @JerryDodge,ARC 是在 Android 平台上实现的。无需释放对象。令人困惑,是的,我知道并且将来会弄乱许多代码 sn-ps,因为它会使近 20 年的代码无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2016-08-23
  • 2011-11-16
  • 1970-01-01
相关资源
最近更新 更多