delphi –为什么文件通过FTP传输后有时大小不同或损坏?

电脑杂谈  发布时间:2020-05-10 07:23:02  来源:网络整理

文件传输协议(ftp)服务 下载_delphi ftp下载文件_delphi从ftp服务器下载文件

我在使用Delphi XE2中的TidFTP组件下载文件时遇到麻烦. 我能够连接到FTP站点,获取文件列表并执行get命令. 但是,当我尝试使用get命令下载文件时,下载的文件数始终大于源文件. 然后后续文件被损坏.

此外,如果我尝试下载多个文件,则会下载第一个文件(大于源文件),而跳过其余文件. get命令不会引发任何错误,它只会退出. 我试图钩住TIDFTP控件delphi从ftp服务器下载文件,该网站上发生了一些事件,例如AfterGet和OnStatus,但是一切看上去都很正常.

delphi ftp下载文件_文件传输协议(ftp)服务 下载_delphi从ftp服务器下载文件

我试图使用第三方FTP客户端访问文件并下载该文件,只是为了确保它与我们的FTP服务器无关,并且下载工作正常. 所以我认为这可能与TidFTP控件有关,或者我可能做错了事.

这是我用来下载文件的例程:

文件传输协议(ftp)服务 下载_delphi从ftp服务器下载文件_delphi ftp下载文件

var
  ftp: TIdFTP;
  strDirectory: string;
begin
  ftp := TIdFTP.Create(nil);
  try
    ftp.Host := 'ftp.myftpserver.com'
    ftp.Passive := false;
    ftp.Username := 'TestUser';
    ftp.Password := 'TestPassword';
    ftp.ConnectTimeout := 1000;
    ftp.Connect();
    ftp.BeginWork(wmRead);
    ftp.ChangeDir('/TestArea/');
    strDirectory := 'c:\test\';
    if not DirectoryExists(strDirectory) then
      CreateDir(strDirectory);
    ftp.Get('Test.zip', strDirectory + '\' + 'Test.zip', true, false);
   ftp.Disconnect();
  except
    on e: exception do
      showMessage(e.message);
  end;
end;

您需要设置TIdFTP.TransferType. 默认值为Id_TIdFTP_TransferType,即ftASCII. 您需要先使用ftBinary并进行设置,然后再执行Get:

文件传输协议(ftp)服务 下载_delphi从ftp服务器下载文件_delphi ftp下载文件

ftp.Connect();
...
ftp.TransferType := ftBinary;
ftp.Get('Test.zip', strDirectory + '\' + 'Test.zip', true, false);
ftp.Disconnect();

TIdFTP.TransferType的文档在一个地方说,在执行Login时会自动将其设置为ftBinary,或者在AutoLogin设置为true时会调用Connect,但是您没有在代码中执行Login且未设置AutoLogin. 在上述声明之后delphi从ftp服务器下载文件,'S段落立即显示:

delphi从ftp服务器下载文件_文件传输协议(ftp)服务 下载_delphi ftp下载文件

根据下面评论中的@RemyLebeau,所引用的文档是错误的,并且登录时从未将TransferType设置为ftBinary. 将受伤的内容留作以后参考.

根据文档:

TransferType的默认值为Id_TIdFTP_TransferType,该值是在组件初始化期间分配的.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-204879-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...