【问题标题】:Issue with Indy FTP componentIndy FTP 组件的问题
【发布时间】:2021-08-12 16:33:38
【问题描述】:

我正在使用带有 Indy FTP 组件的 Delphi 6,在传输超过 2GB 的文件时遇到问题。小文件运行良好。

有没有人遇到过类似的问题?

更新:

从 Indy 9 升级到 Indy 10 后出现一个问题。此代码不再编译:

TbaseFTP = Class(idftp) 
Private 
  Jonwrite : TFTPDataLogEvent; 
  Jonread : TFTPDataLogEvent;

Public 
  Procedure WriteLn(Const POut : string = ''); Override; 
  Function ReadLn(PTerminate : string = LF; const Ptimeout : Integer = IdTimeoutDefault; PMaxllength : integer = -1):string ;override;

Implementation

Procedure TbaseFTP.writeLn(Const Pout : string = '');
Begin 
  if assigned (JOnWrite) then 
    JonWrite(Pout);
  inherited; 
End;

【问题讨论】:

  • 如果没有看到您的代码,很难提出任何更改建议。请编辑您的问题并提供minimal reproducible example
  • 嗨,汤姆,支持 2gb 以上的文件看起来有更多问题。我在其他论坛上发现 Indy Component 有超过 2gb 文件的限制,只是想确保它是正确的,或者任何人都面临类似的问题,因为代码使用的文件少于 2gb。谢谢
  • 您使用的是哪个版本的 Indy? Delphi 6 附带的那个,还是更新的那个? Delphi 6 是第一个支持 64 位流的版本,因此 TIdFTP 应该能够处理 > 2GB 的文件,除非在 Delphi 6 中 TFileStream 的实现存在限制。我得检查一下何时有时间
  • 您好,我使用的是 9.0 版本的 Indy。谢谢

标签: delphi ftp indy


【解决方案1】:

您使用的是 Indy 9,这是一个非常旧的 Indy 版本,Indy 团队不再支持它。那个版本的 Indy 确实对文件传输有 2GB 的限制。

虽然 Delphi 6 是引入 64 位流的版本,但 Indy 9(特别是 TIdTCPConnectionWriteStream()ReadStream() 方法,TIdFTP 用于其传输)从不支持 64 位流.

如果您需要处理大于 2GB 的文件传输,则必须升级到 Indy 10(或者放弃 TIdFTP 并手动实现 FTP 协议,然后您可以随意处理传输)。

Indy 10 仍支持回到 Delphi 5。请注意,对预 Unicode 编译器的支持将在 Indy 11 中删除。

更新:至于您的编译错误,这是因为您正在覆盖基类 TIdTCPConnection 中不再存在的方法,它们已移至 Indy 10 中的 TIdIOHandler 类。因此,您需要相应地更新您的代码。如果要捕获TIdFTP 发送/接收的所有命令和响应,则应覆盖虚拟SendCmd()GetResponse() 方法,或者将TIdConnectionIntercept 派生对象分配给TIdFTP 的@ 987654338@财产。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-06-22
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
相关资源
最近更新 更多