3

我正在使用 IdFTP (Indy 10) 组件从远程位置下载一些文件(zip 和 txt)。在获取每个文件之前,我将 TransferType 设置为二进制。

IdFTP.TransferType := ftBinary;
IdFTP.Get(ASource, ADest, AOverwrite);

我希望可以使用二进制模式下载文本和二进制文件。但是,在正确下载 zip 文件时,文本文件的内容似乎被弄乱了。如果我将文本文件的 TransferType 设置为 ASCII,它将按预期工作。如何检测为给定文件设置的 TransferType?是否有共同点或自动设置?

4

3 回答 3

7

我看不出二进制标志如何弄乱传输的文件。二进制类型意味着服务器按原样传输文件而不进行任何处理。

FTP 服务器应该使用 ASCII 标志的唯一目的是正确处理文本文件中的行尾,通常 (1) 仅在 Unix 中换行或 (2) 在 Windows 中回车 + 换行。但是现在大多数文本编辑器都可以在这两个系统中处理。

所以最安全的做法是只对非常知名的文本文件使用 ASCII 标志,可能只对扩展名为 .txt 的文件使用二进制标志,而对所有其他文件使用二进制标志。

于 2009-09-07T15:47:07.593 回答
3

如有疑问,请排除 (!) - 尝试使用 Windows 命令行 FTP 程序从服务器传输文件,并查看文本文件是否仍然出现错误。该程序将传输二进制(命令 BIN)或文本(命令 ASCII)。如果您使用它传输文件并且它们仍然与您的预期不同,那么服务器端正在执行某些操作*。如果他们顺利到达,那么您(或 Indy)正在做某事。:-)

*文本文件以什么方式搞砸了?如果您要传输 unicode 文本文件,最好还是将它们作为 BINary 传输。我必须承认,正如@unknown(雅虎)所说,在大多数情况下,您可能应该坚持使用 BIN 模式。

于 2009-09-07T17:47:36.467 回答
0

我想这还取决于您如何查看文本文件、ANSI 或 WideChar 来确定文本是否混乱。

于 2009-09-07T16:22:12.703 回答