Delphi 从FTP服务器下载目录

Delphi 从FTP服务器下载目录,delphi,ftp,indy,c++builder-xe5,Delphi,Ftp,Indy,C++builder Xe5,我正在用radstudioidftp开发FTP客户端。如何从服务器下载目录? Delphi或C++。谢谢。您需要调用TIdFTP.ChangeDir以转到所需的起始目录,然后调用TIdFTP.List以检索其文件和子目录的名称,然后在调用TIdFTP.DirectoryListing的TIdFTP.List中循环。获取每个文件名并将每个子目录名称存储到您自己的本地列表中,最后,在本地列表中的每个子目录上重复上述步骤 例如: Procedure DownloadFolder(ARemoteFold

我正在用radstudioidftp开发FTP客户端。如何从服务器下载目录? Delphi或C++。谢谢。

您需要调用TIdFTP.ChangeDir以转到所需的起始目录,然后调用TIdFTP.List以检索其文件和子目录的名称,然后在调用TIdFTP.DirectoryListing的TIdFTP.List中循环。获取每个文件名并将每个子目录名称存储到您自己的本地列表中,最后,在本地列表中的每个子目录上重复上述步骤

例如:

Procedure DownloadFolder(ARemoteFolder, ALocalFolder: string);
Var
  SubFolders: TStringList;
  I: Integer;
Begin
  ALocalFolder := IncludeTrailingPathDelimiter(ALocalFolder);
  ForceDirectories(ALocalFolder);
  SubFolders := TStringList.Create;
  Try
    FTP.ChangeDir(ARemoteFolder);
    FTP.List;
    For I := 0 to FTP.DirectoryListing.Count-1 do
    Begin
      If FTP.DirectoryListing[I].ItemType = ditFile then
      Begin
        FTP.Get(FTP.DirectoryListing[I].FileName, ALocalFolder + FTP.DirectoryListing[I].FileName);
      End
      Else if FTP.DirectoryListing[I].ItemType = ditDirectory then
      Begin
        if (FTP.DirectoryListing[I].FileName <> '.') and FTP.DirectoryListing[I].FileName <> '..') then
          SubFolders.Add(FTP.DirectoryListing[I].FileName);
      End;     
    End;
    For I := 0 to SubFolders.Count-1 do
    Begin
      DownloadFolder(ARemoteFolder + '/' + SubFolders[I], ALocalFolder + SubFolders[I]);
    End;
  Finally
    SubFolders.Free;
  End;
End;

有必要添加以下条件:

如果IdFTP.DirectoryListing[I].ItemType=ditDirectory和 LengthIdFTP.DirectoryListing[I].FileName>2然后


避免。。作为目录名

您尝试了什么,什么失败了?通过谷歌搜索idftp目录列表,你们就可以开始了。我可以得到这个列表。但我需要下载带有文件的文件夹。过程get-Donw从服务器加载文件。我不明白如何下载所有文件。文件夹可能包含其他文件夹和文件…这是遍历目录时的重复获取。谷歌它,开始建设,当它失败时把你的代码放在这里。可能重复谢谢你。我知道一定有递归。你能告诉我怎样才能绕过所有的目录和子目录吗?我在回答中加了一个例子。可能需要一些调整,但它会给你它的jist。依赖这样的长度是错误的,因为可能有真正的文件夹中只有1-2个字符。忽视。。项,具体检查该项,并查找好的度量值,例如:如果IdFTP.DirectoryListing[I].ItemType=ditDirectory和IdFTP.DirectoryListing[I].FileName'.'和IdFTP.DirectoryListing[I].FileName'
DownloadFolder('/StartingDir', 'C:\Downloaded');