Kłopot przy pobieraniu listy katalogów z serwera FTP

0

Witam,

chciałbym pobrać z serwera FTP listę katalogów (samych katalogów bez plików). Mam więc taki oto kod:

procedure TForm1.Button1Click(Sender: TObject);
var
  FTP: TIdFTP;
  lista: tstringList;
  i: integer;
begin
  ftp := TIdFTP.Create(nil);
  lista := TStringList.Create;//tu bede przechowywac liste plikow
  //ustawiam ftp:
  ftp.Host := 'jakis_host';
  ftp.Username := 'jakis_user';
  ftp.Password := 'jakies_haslo';
  ftp.Passive := true;
      try
         ftp.Connect();
         if ftp.Connected = true then
         begin
             ftp.List(lista);//wypelnienie komponentu wraz z katalogami
             lista.Clear;
             for i := 1 to ftp.DirectoryListing.Count-1 do
             begin
                if ftp.DirectoryListing[i].ItemType=ditDirectory then ShowMessage(ftp.DirectoryListing.Items[i].Text);
             end;

             memo1.Text := lista.Text;
         end
         else
         begin
            showmessage('NIE UDALO SIE');
         end;

      except
         on exception do //cos tam mozna wpisac
      end;
  ftp.Free;
  lista.Free;
end;

ten kod działa, czyli pokazuje w ShowMessage nazwe katalogu. Problem polega na tym, ze pokazuje ją w szczegółowej postaci. A gdy chcę aby nazwy katalogów byly pokazywane bez detali uzywajac kodu:

ftp.List(lista, '', false);

to dostaje blad krytyczny o tresci

Project Project1.exe raised exception class EIdInvalidFTPListingFormat with message 'Unknown FTP listing format'. Process stopped. Use Step or Run to continue.
O co tu chodzi?

Pozdrawiam!

0

Pewnie jest jakaś struktura, przechowująca szczegółowe dane podzielone na własności. Jak w FTP pod Synapse. Ale z Indy tutaj może skutecznie pomóc raczej tylko @kAzek. Mam nadzieję, że Go przywołałem. To poczekaj aż odpowie.

0

Dobra to czekam :)

0

nie znam aż tak dobrze Indy , ale coś mi się tu nie podoba

             ftp.List(lista);//wypelnienie komponentu wraz z katalogami
             lista.Clear;

wypełniasz komponent 'list' treścią z serwera FTP zaraz potem czyscisz go

0
    ftp.List(lista);//wypelnienie komponentu wraz z katalogami
    lista.Clear;

co to za twór? :D

ps; spóźniłem się ;)

0

Zastosowalem to tylko dlatego aby wypelnic FTP.DirectoryListing danymi. Bez tego to pole pozostaje puste. Mimo to nawet jak nie czyszcze listy, to wciaz nie dostaje tego co chce. Fakt - nie ma bledu krytycznego ale nie mam danych bez detali. Sprawdza się to tylko w przypadku danych szczegolowych.

0

Jak to jest wersja Indy?
Moje Indy nie posiadają właściwości Text(ale posiadają np. FileName) w

ftp.DirectoryListing.Items[i]

a więc sprawdź w dokumentacji i/lub w IDE co jest jeszcze dostępne w tej kolekcji Items, czyli:

ftp.DirectoryListing.Items[i].//->tu naciśnij Ctrl+Space

Bo pewnie będzie tam dokładnie to, o co Ci chodzi...

0

To sa Indy standardowo dolaczone do Delphi 7 Enterprise. Zainstalowalem tez Indy 9 na personal z takim samym efektem. Natomiast gdy zmieniam z ftp.DirectoryListing.Items[i].Text na [...].Data lub [...].FileName i uruchamiam program spod poziomu Delphi - znowu dostaję wyżej wspomniany błąd krytyczny. A gdy uruchamiam program z zewnątrz, nic nie dostaję.

0
Reiko napisał(a):

[...] i uruchamiam program spod poziomu Delphi - znowu dostaję wyżej wspomniany błąd krytyczny. A gdy uruchamiam program z zewnątrz, nic nie dostaję.

To zmienia postać rzeczy - a czasem firewall nie blokuje Ci Delphi IDE?
Skoro działa Ci normalnie przez Ctrl+(Shift)+F9 a nie działa przy F9 to coś masz nagmerane w systemie i nie jest to problem delphi/Indy/whatever - raczej nie jest, bo głowy nie dam ;-)

0

Nie, za kazdym razem pyta czy przepuscic polaczenie to zezwalam. Tzn dziala normalnie bez bledu krytycznego ale to co chce, czyli liste katalogow bez detali mi nie pokazuje.

0

To tak z ciekawości. Sprawdź może jak zadziała exek i kod z załącznika. Powinieneś dać radę przerobić go do otrzymania tylko listy katalogów. Jednak jeżeli nadal upierasz się bawić z indykiem. To trzeba poczekać na Użytkownika @kAzek aż zajrzy na forum. No chyba, że ktoś inny tutaj da radę dojśc w czym jest problem.

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