delphi – 为什么文件在通过FTP传输后有时会有不同的大小或损坏
我在使用Delphi XE2中的TidFTP组件下载文件时遇到问题.我能够连接到FTP站点,获取文件列表并执行get命令.但是,当我尝试使用get命令下载文件时,文件的下载量始终大于源文件.然后后续文件已损坏.
此外,如果我尝试下载多个文件,则会下载第一个文件(大于源文件),并跳过其余文件. get命令不会抛出任何错误,它只是退出.我试图挂钩TIDFTP控件上的一些事件,如AfterGet和OnStatus,但一切看起来都很正常. 我尝试使用第三方FTP客户端访问该文件并下载它只是为了确保它不是我们的FTP服务器的问题,并且该下载按预期工作.所以我认为它可能与TidFTP控件有关,或者我可能做错了什么. 这是我用来下载文件的例程: 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.Connect(); ... ftp.TransferType := ftBinary; ftp.Get('Test.zip',false); ftp.Disconnect(); TIdFTP.TransferType的文档在一个地方说它在执行Login时自动设置为ftBinary,或者在AutoLogin设置为true时调用Connect,但是你没有在代码中执行Login并且没有设置AutoLogin.紧接上述声明之后的段落说: 根据@RemyLebeau在下面的评论中,引用的文档是错误的,并且TransferType在登录时从未设置为ftBinary.留下受伤的内容供将来参考. 根据文件:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |