[IdFTP] Wysyłanie wielu plików

0

Witam

Mam w obiekcie TStringList listę plików, do wrzucenia na serwer FTP (metoda Put komponentu IdFTP z pakietu INDY) i mam problem z wysłaniem wielu plików.

Robiąc to w pętli, musiałbym dać jakiś czas przerwy do następnej iteracji, aby pozwolić wrzucić plik, np. 300 ms. Oczywiście Sleep(300) nic nie da, bo ta funkcja zatrzymuje program na określony czas, a nie o to chodzi.

Próbuję więc z TTimer. Mam powiedzmy w buttonie "Wyślij" taki kod:

IdFTP.Host := edtFtpHost.Text;
IdFTP.Username := edtFtpLogin.Text;
IdFTP.Password := edtFtpHaslo.Text;
IdFTP.Passive := cbFtpPasywne.Checked;
IdFTP.Connect;   //(true, 20000);

ListaPlikow := TStringList.Create;
ListaPlikow.Add('c:\x.txt');
ListaPlikow.Add('c:\y.txt');

if IdFTP.Connected then
begin
  IdFTP.ChangeDir('www');
  Timer1.Enabled := True;
end;

I na szybko napisany kod dla Timera (Interval = 500, Enabled = False). W OnTimer:

// X to zmienna globalna z domyślną wartością 0
if IdFTP.Connected then
begin
  Inc(X);
  if X > 2 then
  begin
    Timer1.Enabled := False;
    Showmessage('Wyslano');
    Exit;
  end else IdFTP.Put(ListaPlikow[X-1], ExtractFileName(ListaPlikow[X-1]), True);
end else
begin
  ShowMessage('Niepołączony');
  Timer1.Enabled := False;
  exit;
end;

Ale niestety dostaję komunikat "Nie połączony". Jak powinienem to zrobić?

Pozdrawiam

0

ale po co Ci ten timer - nie możesz po ludzku

  1. połączyć się
  2. poustawiać katalogi itp
  3. w pętli wysyłać pliki
0

Misiek, hm, albo coś źle robię, albo nie bardzo tak mogę (wywala Access Violation na linijce z IdFTP.Put):

ListaPlikow := TStringList.Create;
ListaPlikow.Add('c:\x.txt');
ListaPlikow.Add('c:\y.txt');

if IdFTP.Connected then
begin
  IdFTP.ChangeDir('www');
  for i := 0 to ListaPlikow.Count-1 do
    IdFTP.Put(ListaPlikow[i], ExtractFileName(ListaPlikow[i]), True);
end;

// problem rozwiązany - pomogło zwiększenie Intervala

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0