Загрузка каталога с FTP-сервера

Я разрабатываю FTP-клиент от RAD Studio (IdFTP). Как я могу скачать каталог с сервера? Delphi или C++. Благодарю.

2 ответа

Решение

Вам нужно позвонить TIdFTP.ChangeDir() перейти в нужный начальный каталог, затем вызвать TIdFTP.List() чтобы получить имена его файлов и подкаталогов, а затем перебрать TIdFTP.DirectoryListing призвание 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
        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;

DownloadFolder('/StartingDir', 'C:\Downloaded');

Необходимо добавить условие:

Иначе, если (((IdFTP.DirectoryListing[I].ItemType = ditDirectory) и (Длина (IdFTP.DirectoryListing [I].FileName)> 2)) тогда

избегать ".." в качестве имени каталога

Другие вопросы по тегам