Delphi 2010 Indy FTP与ProFTP Linux服务器

Delphi 2010 Indy FTP与ProFTP Linux服务器,ftp,delphi-2010,indy10,proftpd,Ftp,Delphi 2010,Indy10,Proftpd,我有一个简单的问题。我在Delphi2010工作 我的软件中有一个FTP客户端。当我使用基于IIS的FTP时,它工作正常 上周我换了FTP服务器。现在我有了一个带有ProFTPD的Linux服务器 当我使用这个FTP服务器时,它可以工作,但它会下载损坏的文件 我注意到使用调试器时函数idFTP.Size返回-1。因此,我使用了idFTP.list文件时Indy FTP目录解析器返回的大小编号。使用这种方式,文件将在损坏状态下下载 但是,使用其他FTP程序,文件下载正常 with idFTP1 d

我有一个简单的问题。我在Delphi2010工作

我的软件中有一个FTP客户端。当我使用基于IIS的FTP时,它工作正常

上周我换了FTP服务器。现在我有了一个带有ProFTPD的Linux服务器

当我使用这个FTP服务器时,它可以工作,但它会下载损坏的文件

我注意到使用调试器时函数idFTP.Size返回-1。因此,我使用了idFTP.list文件时Indy FTP目录解析器返回的大小编号。使用这种方式,文件将在损坏状态下下载

但是,使用其他FTP程序,文件下载正常

with idFTP1 do
begin
 AutoLogin := False;
 IPVersion := Id_IPv4;
 Passive := True;
 TryNATFastTrack := true;
 Port := 21;
 Host := '192.168.121.221';
 Username := 'flxupgrader';
 Password := 'avaricia';
 Connect;
 login;
 TransferType := ftBinary;
 BeginWork(wmRead);
 Get('/_Enterprise/141010.zip',
    'E:\Usuarios\Pablo\141010.zip');
 EndWork(wmRead);
 Disconnect;
end;
当我在Linux with ProFTP FTP server中使用FTP服务器执行此代码时,我的拉链被下载并损坏。您无法从中提取任何内容,CRC错误

重要提示:使用Windows资源管理器访问FTP服务器下载文件:正常。文件是24525K。使用我的程序和Indy 10下载该文件时,下载的文件为24616K,并且已损坏。

TIdFTP.Size在以下任一情况下返回-1:

FTP服务器报告SIZE命令的除213以外的任何回复代码

FTP服务器报告的回复代码为213,但其回复文本无法解析为Int64

这就是说,大小是严格为用户呼叫时需要。TIdFTP本身根本不使用大小,它在实际传输中不起任何作用。Size在发送Size命令之前将TransferType属性设置为ftBinary,然后根据需要恢复以前的值。例如,某些FTP服务器不允许在ASCII模式下使用SIZE命令


传输文件时,必须确保所传输的文件类型使用了正确的TransferType。损坏的文件比源文件大这一事实表明,根据FTP规范,您正在以默认类型的ASCII模式传输文件,因此在传输过程中,裸CR和LF字节八位字节被转换为CRLF序列。只有文本文件才能在ASCII模式下传输,并且只有在跨平台换行是一个问题时。其他任何内容都应以二进制模式传输,以便字节八位字节按原样传输。

几乎不可能调试您没有向我们展示的代码,或者您没有提供的信息,例如,文件是二进制还是文本,或者是关于腐败意味着什么的想法。我编辑了这个问题,并提供了关于这个问题的更多信息@雷米:新问题出现了:我换了FTP服务器。现在我有了一个VSFTP。使用Windows资源管理器:文件下载正常。在我的Indy 10.5.5程序中,我得到一个错误异常类EIdReplyRFCError,消息为“无法打开文件”。使用DELPHI XE3编译:它可以很好地使用ProFTP。它不适用于VSFTP。我通过噩梦解决了我的问题:在Delphi 2010上安装最新的Indy 10。现在一切都好了。我将ProFTP FTP服务器保留在Linux上。Thks。