Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как скачать с ФТП все файлы указанной папки?


Автор: Gvo3D 13.2.2006, 16:51
Есть ФТП сервер. Есть пример закачки 1 указанного файла. НО как закачать все файлы указанной папки? помогите плз. smile

Автор: _hunter 13.2.2006, 16:59
получить список файлов ( метод List ) и использовать пример для каждого файла из списка

Автор: Gvo3D 13.2.2006, 23:35
function FtpDownloadFile(strHost, strUser, strPwd: string;
Port: Integer; ftpDir, ftpFile, TargetFile: string; ProgressBar: TProgressBar):
Boolean;

Вот функция из фака. Что такое TargetFile ?

Автор: _hunter 14.2.2006, 12:07
в том же факе смотри описание параметров

Автор: Gvo3D 16.2.2006, 17:09
почему при вызове этой процедуры программа зависает???
помогите разобраться ,плз!

Автор: Snowy 16.2.2006, 17:25
Потому что поток занят ожиданием ответа от сервера.

Автор: _hunter 16.2.2006, 17:27
потому как занята программа копированием. в отдельный поток вынеси

Автор: Gvo3D 17.2.2006, 18:25
Спасибо. Ща попробу....

Автор: Gvo3D 17.2.2006, 19:35
Я зделал так, но всё равно не работает:
Код

procedure TForm1.Button1Click(Sender: TObject);//Создание 2-х потоков
begin
T1:=TmyThead.Create(true);
T1.box1:=true;
T1.Priority:=tpNormal;

T2:=TmyThead.Create(true);
T2.box1:=False;
T2.Priority:=tpNormal;

T1.Resume;
T2.Resume;
end;


Код

procedure TMyThead.Execute;//Синхронизация
begin

 while not Terminated do
   if Box1 then Synchronize (Form1.paint2)
           else Synchronize (Form1.DownloadFile)

end;

и в процедурку Form1.DownloadFile я поместил функцию из примера:
Код

procedure Tform1.DownloadFile;
 begin

 FtpDownloadFile('10.20.222.222','123','123',
  21, '/', '111.txt','c:/111.txt' ,  ProgressBar1);

 end;

Form1.paint2 - выводит на экран графику.

box1: boolean; в описании класса TMyThead в public
T1,T2: TMyThead;
Можно ли так делать? простите за дурацкие вопросы, я тоько начинаю...

Автор: Fiyanov 16.5.2007, 06:54
Цитата

получить список файлов ( метод List ) и использовать пример для каждого файла из списка 


И где этот метод взять? Чей это метод?

Автор: Matematik 16.5.2007, 08:39
Gvo3D, ОЙ, какой жуть.
Так нельзя. Доп поток создается для какой-то работы, главный должен заниматься интерфейсом. Синхронизация происходит в главном потоке, т.ч. твой код бессмысленен.
В соседней ветке накатал небольшой примерчик подключения к ftp в доп потоке http://forum.vingrad.ru/index.php?showtopic=150930&view=findpost&p=1132904
Так вот там операции с ftp происходят в доп потоке, а вывод в лог в синхронизации.
Цитата(Gvo3D @  13.2.2006,  16:51 Найти цитируемый пост)
НО как закачать все файлы указанной папки?

Получить список файлов в этой директори и в цикле по списку качать отдельно каждый.
Если бы поискал по форуму, нашел бы несколько примеров.

Автор: Fiyanov 16.5.2007, 11:00
Цитата

Получить список файлов в этой директори и в цикле по списку качать отдельно каждый.


 И как блин получить этот список? FindNext? Нет такого. Метод List непонятно где искать. 

Автор: Fiyanov 18.5.2007, 06:04
Может всё таки кто нибудь ответит в этой ветке нормально? Чтоб не возникало больше никаких вопросов. Только обстоятельно и с примером.  smile 

Автор: Fiyanov 18.5.2007, 08:00
 smile туц туц туц туц. 
Разобрался сам. Для тех кто как и я не понял откуда взялся метод List. Оказываеться реч идёт о компоненте  TidFTP. Который расположен на закладке Indy Clients. Вот у него как раз то и есть этот метод. Который возвращает в TStringList список найденых файлов. Если последним параметром поставить значение TRUE  то будет выводиться так же информация о файлах.  И при помощи этого же компонента можно получать/посылать файлы. Так что процедурка из ФАКа при использовании этого компонента теряет свою актуальность. Вот.

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