我正在使用IdFTP(Indy 10)组件从远程位置下载一些文件(zip和txt)。在获取每个文件之前,我将TransferType设置为二进制文件。
IdFTP.TransferType := ftBinary;
IdFTP.Get(ASource, ADest, AOverwrite);
我希望可以使用二进制模式下载文本和二进制文件。但是,正确下载zip文件时,看起来文本文件内容会混乱。如果我将TransferType设置为ASCII文本文件,它将按预期工作。如何检测为给定文件设置的TransferType?是否有共同点或自动设置?
答案 0 :(得分:6)
我没看到二进制标志如何弄乱传输的文件。二进制类型表示服务器传输文件而不进行任何处理。
FTP服务器唯一应该使用ASCII标志的是,正确处理文本文件中的行尾,通常是(1)Unix中的换行或(2)Windows中的回车+换行。但是现在大多数文本编辑器都处理这两种系统。
所以最安全的是对于众所周知的文本文件只使用ASCII标志,可能只使用扩展名为.txt的文件,并为所有其他文件使用二进制标志。
答案 1 :(得分:3)
如有疑问,请将其排除(!) - 尝试使用Windows命令行FTP程序从服务器传输文件,并查看文本文件是否仍然出错。程序将传输二进制(命令BIN)或文本(命令ASCII)。如果您使用此文件传输文件并且它们仍以不同的方式达到您的预期,那么服务器端正在进行某些操作*。如果他们到达正常,那么你(或印地)正在做某事。 : - )
*文本文件以什么方式搞砸了?如果您要传输unicode文本文件,最好将它们作为BINary传输。我必须承认,正如@unknown(雅虎)所说,在大多数情况下你应该坚持使用BIN模式。
答案 2 :(得分:0)
我想这也取决于你如何查看文本文件,ANSI或WideChar,看文本是否搞砸了。