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, опять же, если что-то не получается, то снова вылетит месага об ошибочке.
Если возникли вопросы по коду, или необходимо просто помочь, буду рад оказать содействие )))))
Поделись с друзьями:
Рубрики: Delphi, Programming · Теги: delphi, idFTP, Indy, TidFtp, фтп
05.03.2014 в 13:15
· Ссылка
У меня Antivir Personal после дополнения этого куска кода сразу выдаёт Троян якобы TR/ATRAPS.Gen и хрен запустишь прогу пока не отрубишь антивир. Опять же, если у пользователя тот же AntiVir стоит будут такие же вилы! Значит надо искать другие варианты обновлений... а то нет универсальности решения. Странно, конечно какого лешего Антивир фигнёй страдает на такой безобидный код, но блин не айс получается в плане реализации закачки.
06.03.2014 в 06:48
· Ссылка
Согласен, а более адекватные антивирусы что говорят?
26.09.2013 в 13:09
· Ссылка
На делфях уже сто лет не кодил 🙂
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;
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;
и вызывать когда нужно, перепишу потом, главное что суть ясна
08.07.2013 в 19:49
· Ссылка
ну смотри: ты выставил все параметры для соединения, потом проверяешь: если соединен — разорвать соединение, иначе скачать файл (со всеми обработками).
Говоря точнее, надо бы убрать else и один end; в конце. Тогда проверка на соединение отработает и скачивание произойдет. В любом случае спасибо, этот пример взял для работы над своим приложением 🙂
08.07.2013 в 18:40
· Ссылка
Поправил в коде, добавил переподключение, если уже подключены 🙂
08.07.2013 в 18:38
· Ссылка
Немного не так, не сработает при втором жмакании на кнопку, т.к. компонент просто отключится от сервера 🙂
А при первом жмакании, он проверит, подключены мы или нет к севраку, если подключены, от отключаемся, если нет, то конектимся и выкачиваем то что нас интересует.
Опять же, это просто пример, возможно немного неудачно я проверкой подключения сделал, но тут уже проверка на гика)))))
08.07.2013 в 18:20
· Ссылка
нене, если не убрать этот if, то else не сработает при первом запуске, когда процесс не соединен с сетью.
07.07.2013 в 20:41
· Ссылка
Эм, у каждого свои подходы к программированию, ну убери, и не обрабатывай исключение, если твой компонент уже будет подключен, все в твоих руках))))))
06.07.2013 в 20:52
· Ссылка
>idFTP.Disconnect
>else
>try
Я бы это else убрал, без нее действительно будет работать 🙂
А в конце, для чистоты кода я бы сделал
idFTP.Disconnect;
17.05.2013 в 08:24
· Ссылка
Перепроверь логин пароль, тебе четко указало ошибку
'Login or password incorrect!'.
попробуй копипастом в тотале те данные что используешь в проге
17.05.2013 в 02:57
· Ссылка
Не работает... Пишет Project Run.exe raised exception class EIdReplyRFCError with message 'Login or password incorrect!'. Хотя брэндмауэр выключен, антивируса нет, а пользователь есть такой для входа на фтп. с тотала захожу без проблем