Загрузка каталога с 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)) тогда
избегать ".." в качестве имени каталога