Delphi idFTP пример скачивания файла с ftp

Недавно писал себе программулину, сливающую резервные копии с фтп сервера на локальный тазик, и пришлось сесть подразобраться с Indy компонентом idFTP. 
Для начала на форму выкинем кнопку, об зовем ее Download, и компонент idFTP из закладки Indy Clients, должно получиться нечто похожее на постер к посту (см. выше 😉 )
Чтож, полпути пройдено, теперь в обработчике событий для нажатия кнопки пишем следующий код:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  idFTP.Username:= 'backuper';
  idFTP.Password:= 'xxxxxxxxxxxxx';
  idFTP.Host:= 'ip_ftp_servera';
  idFTP.Passive:= True;
  if idFTP.Connected then
    begin
      idFTP.Disconnect;
try
    idFTP.Connect(True);
  except
    on E : Exception do
      ShowMessage('Ошибка подключения: '+E.Message);
  end;
  if idFTP.Connected then
    try
      idFTP.Get('test.rar', 'c:/temp/test.rar', True);
    except
      on E : Exception do
        ShowMessage('Ошибка скачивания файла: '+E.Message);
    end;
    end
  else
  try
    idFTP.Connect(True);
  except
    on E : Exception do
      ShowMessage('Ошибка подключения: '+E.Message);
  end;
  if idFTP.Connected then
    try
      idFTP.Get('test.rar', 'c:/temp/test.rar', True);
    except
      on E : Exception do
        ShowMessage('Ошибка скачивания файла: '+E.Message);
    end;
end;

В двух словах по коду:
проверяем подключен ли компонент к серверу, если подключен, то отключаем и подключаемся по новой, если не удается подключиться, вылетит сообщение, с описанием ошибки, после пробуем слить файл test.rar, опять же, если что-то не получается, то снова вылетит месага об ошибочке.
Если возникли вопросы по коду, или необходимо просто помочь, буду рад оказать содействие )))))

Поделись с друзьями:

Опубликовано 30.09.2011 в 07:32 · Автор komivlad · Ссылка
Рубрики: Delphi, Programming · Теги: , , , ,

13 комментариев

Подписаться на комментарии по RSS

  1. Написал(-а) DFK
    05.03.2014 в 13:15
    Ответить · Ссылка

    У меня Antivir Personal после дополнения этого куска кода сразу выдаёт Троян якобы TR/ATRAPS.Gen и хрен запустишь прогу пока не отрубишь антивир. Опять же, если у пользователя тот же AntiVir стоит будут такие же вилы! Значит надо искать другие варианты обновлений... а то нет универсальности решения. Странно, конечно какого лешего Антивир фигнёй страдает на такой безобидный код, но блин не айс получается в плане реализации закачки.

    • Написал(-а) komivlad
      06.03.2014 в 06:48
      Ответить · Ссылка

      Согласен, а более адекватные антивирусы что говорят?

  2. Написал(-а) komivlad
    26.09.2013 в 13:09
    Ответить · Ссылка

    На делфях уже сто лет не кодил 🙂

  3. Написал(-а) reader
    25.09.2013 в 12:22
    Ответить · Ссылка

    И это лишнее. Вот так надо (Delphi XE5):

    procedure Form1.acReloadExecute (Sender: TObject);

    begin

    idFTP1.Username:= 'backuper';

    idFTP1.Password:= 'xxxxxxxxxxxxx';

    idFTP1.Host:= 'ip_ftp_servera';

    idFTP1.Passive:= True;

    idFtp1.AutoLogin:=True;

    if idFTP1.Connected then idFTP1.Disconnect;

    try

    idFTP1.Connect ();

    except

    on E : Exception do

    ShowMessage ('Ошибка подключения: '+E.Message);

    end;

    if idFTP1.Connected then try

    idFTP1.Get ('test.rar', 'c:/temp/test.rar', True);

    except

    on E : Exception do

    ShowMessage ('Ошибка скачивания файла: '+E.Message);

    end;

    end;

  4. Написал(-а) komivlad
    08.07.2013 в 19:56
    Ответить · Ссылка

    вообще, этоn блок можно вынести в отдельную функцию

    try

    idFTP.Connect (True);

    except

    on E : Exception do

    ShowMessage ('Ошибка подключения: '+E.Message);

    end;

    if idFTP.Connected then

    try

    idFTP.Get ('test.rar', 'c:/temp/test.rar', True);

    except

    on E : Exception do

    ShowMessage ('Ошибка скачивания файла: '+E.Message);

    end;

    и вызывать когда нужно, перепишу потом, главное что суть ясна

  5. Написал(-а) alexvgrey
    08.07.2013 в 19:49
    Ответить · Ссылка

    ну смотри: ты выставил все параметры для соединения, потом проверяешь: если соединен — разорвать соединение, иначе скачать файл (со всеми обработками).

    Говоря точнее, надо бы убрать else и один end; в конце. Тогда проверка на соединение отработает и скачивание произойдет. В любом случае спасибо, этот пример взял для работы над своим приложением 🙂

  6. Написал(-а) komivlad
    08.07.2013 в 18:40
    Ответить · Ссылка

    Поправил в коде, добавил переподключение, если уже подключены 🙂

  7. Написал(-а) komivlad
    08.07.2013 в 18:38
    Ответить · Ссылка

    Немного не так, не сработает при втором жмакании на кнопку, т.к. компонент просто отключится от сервера 🙂

    А при первом жмакании, он проверит, подключены мы или нет к севраку, если подключены, от отключаемся, если нет, то конектимся и выкачиваем то что нас интересует.

    Опять же, это просто пример, возможно немного неудачно я проверкой подключения сделал, но тут уже проверка на гика)))))

  8. Написал(-а) alexvgrey
    08.07.2013 в 18:20
    Ответить · Ссылка

    нене, если не убрать этот if, то else не сработает при первом запуске, когда процесс не соединен с сетью.

  9. Написал(-а) komivlad
    07.07.2013 в 20:41
    Ответить · Ссылка

    Эм, у каждого свои подходы к программированию, ну убери, и не обрабатывай исключение, если твой компонент уже будет подключен, все в твоих руках))))))

  10. Написал(-а) alexvgrey
    06.07.2013 в 20:52
    Ответить · Ссылка

    >idFTP.Disconnect

    >else

    >try

    Я бы это else убрал, без нее действительно будет работать 🙂

    А в конце, для чистоты кода я бы сделал

    idFTP.Disconnect;

  11. Написал(-а) komivlad
    17.05.2013 в 08:24
    Ответить · Ссылка

    Перепроверь логин пароль, тебе четко указало ошибку

    'Login or password incorrect!'.

    попробуй копипастом в тотале те данные что используешь в проге

  12. Написал(-а) demon-sheff
    17.05.2013 в 02:57
    Ответить · Ссылка

    Не работает... Пишет Project Run.exe raised exception class EIdReplyRFCError with message 'Login or password incorrect!'. Хотя брэндмауэр выключен, антивируса нет, а пользователь есть такой для входа на фтп. с тотала захожу без проблем

Подписаться на комментарии по RSS

Написать комментарий