Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Загрузка всех файлов из директории FTP. (ICS)


Автор: val1401 16.9.2010, 15:24
Здравствуйте!
Подскажите пожалуйста как загрузить все файлы из определённой директории на FTP при помощи TFtpClient из библиотеки ICS?


Автор: Akella 16.9.2010, 15:53
А примеры ты посмотрел?

Добавлено @ 15:55
Код

// slData - TStringList;
// У TFtpClient есть свойство LocalFileName, в которое нужно прописать имя файла. В этот файл компонента будет сохранять список файлов, каталогов. Можно, конечно, ещё работать со свойствами OnDisplay/OnDisplayFile.



//получаем список всего, что есть в директории на FTP сервере


    if FtpClient1.Connected then
    begin
          Application.ProcessMessages;
          LogUpdate('попытка смены каталога на "out"');

          FtpClient1.DisplayFileFlag := true;

          //смена каталога
          FtpClient1.HostDirName := '/out';
          FtpClient1.Cwd;

          if FtpClient1.Dir then
            begin
              slData.Clear;
              FtpClient1.Pwd;
              LogUpdate('Рабочий каталог: '+  FtpClient1.DirResult);


              //получаем список файлов

              //чистим список перед получением в него списка фтп-файлов
              slData.Clear;

              //удаляем файл со старым списком
              if FileExists(sMyDocAppPath + 'last_ftp_list.txt') then
                DeleteFile(sMyDocAppPath + 'last_ftp_list.txt');

              FtpClient1.LocalFileName := sMyDocAppPath + 'last_ftp_list.txt';

              FtpClient1.DisplayFileFlag := false;

              if not FtpClient1.Ls then
                LogUpdate(FtpClient1.ErrorMessage);


              slData.LoadFromFile(sMyDocAppPath + 'last_ftp_list.txt');

              FtpClient1.DisplayFileFlag := false;
            end;


          LogUpdate('Найдено файлов: '+intToStr(slData.Count));


Автор: val1401 16.9.2010, 16:24
Делаю так:
Код

procedure TForm1.DownloadFilesFromFTP(Server, Login, Password, Directory_FTP, Directory_Local :string;
 PassiveFTP : boolean);
var
 i: Integer;
 FileList : TStringList;
begin
 Form1.FtpClient1.HostName:=Server;
 Form1.FtpClient1.Username:=Login;
 Form1.FtpClient1.Password:=Password;
 Form1.FtpClient1.HostDirName := Directory_FTP;
 Form1.FtpClient1.Passive:=PassiveFTP ;
 Form1.FtpClient1.Connect;
 Form1.FtpClient1.Cwd;
 Form1.FtpClient1.LocalFileName := Application.GetNamePath + 'File.txt';
 Form1.FtpClient1.Ls;
 FileList := TStringList.Create;
 FileList.LoadFromFile(Application.GetNamePath + 'File.txt');
 for i := 0 to FileList.Count - 1 do
  begin
   Form1.FtpClient1.HostFileName := FileList.Strings[i];
   Form1.FtpClient1.LocalFileName := 'D:\' + FileList.Strings[i];
   Form1.FtpClient1.Get;
  end;
 Form1.FtpClient1.Quit;
 FreeAndNil(FileList );
 DeleteFile(Application.GetNamePath + 'File.txt');
end;



Возникла такая проблема... Если запустить прогу и выполнить эту процедуру, то всё работает нормально, если выполнить процедуру ещё раз то Form1.FtpClient1.Ls
возвращает только один файл... Если перезапустить прогу, то всё опять работает нормально... То есть процедура отрабатывает нормально только один раз за одну сессию программы, иначе после одного выполнения 
Form1.FtpClient1.Ls возвращает только один файл, причём последний по алфавиту...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)