FTP 使用 IdFTP 在 Delphi 中下载损坏的文件

Soo*_*tos 1 delphi ftp

我正在使用从 FTP 服务器IdFTP下载.exe.zip文件。该文件已下载并从 FTP 传送到我的计算机,问题是在传输过程中文件.exe 已损坏,我无法在我的计算机中打开它。

这是代码。

  IdFTP1.Connect;
  IdFTP1.Get(EdtRemoteFile.Text,EdtDirectory.Text + '\' + EdtRemoteFile.Text, True, true);
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 6

默认情况下,FTP 协议以 ASCII(文本)模式运行。在这种模式下,换行符在传输过程中被标准化,这会损坏二进制文件(并且也可能损坏非 ASCII 文本文件,例如 UTF-8)。因此,在传输非文本文件时,您需要切换到 IMAGE(二进制)模式,例如:

uses
  ..., IdFTPCommon; 

IdFTP1.Connect;
IdFTP1.TransferType := ftBinary; // <-- ADD THIS
IdFTP1.Get(EdtRemoteFile.Text,EdtDirectory.Text + '\' + EdtRemoteFile.Text, True, true);
Run Code Online (Sandbox Code Playgroud)

  • @Olivier UTF-8 *可能*会被损坏,如果任何一方的 ASCII 模式传输的实现都不是 8 位安全的。`TIdFTP` 的实现是(无论何种模式,它总是以 8 位安全的方式传输数据),但不能保证服务器的实现是 8 位安全的。另一方面,以 IMAGE 模式传输可以为双方提供保证。 (2认同)