从FTP服务器下载目录

时间:2014-04-18 12:48:06

标签: delphi ftp indy c++builder-xe5

我正在开发RAD Studio(IdFTP)的FTP客户端。我如何从服务器下载目录? Delphi或C ++。感谢。

2 个答案:

答案 0 :(得分:8)

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

例如:

TIdFTP.Get()

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;

答案 1 :(得分:2)

有必要添加条件:

  

否则if((IdFTP.DirectoryListing [I] .ItemType = ditDirectory)和   (长度(IdFTP.DirectoryListing [I] .FileName)&gt; 2))然后

避免&#34; ..&#34;作为目录名称