Конференция "Сети" » IdFTP [D7, WinXP]
 
  • anthems © (19.05.07 04:10) [0]
    После соединения с фтп сервером и забивания каталогов в ListBox, пытаюсь определить файл это или папка

    if IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].ItemType =ditDirectory
    выпадает ошибка - "List index out of bounds"
    при етом - IdFTP1.DirectoryListing.Items.Count = 0
    IdFTP1.DirectoryListing.DirectoryName пустое

    работаю с 2005 дельфой.
    Заранее благодарен за все предложенные варианты решения проблемы.
  • Anatoly Podgoretsky © (19.05.07 10:57) [1]
    Зачем же ты обращаешься к списку если у тебя нет элементов?
    Да и вообще сама идея странная, по индексу из одного списка обращаться к индексу другого списка, замучаешься с синхронизацией, в одном 3 в другом 10.
  • anthems © (19.05.07 13:53) [2]
    В этом то и проблема, что элементов нету а должны быть, может я чего не понимаю в работе этого компонента, поэтому и прошу помощи )
  • Anatoly Podgoretsky © (19.05.07 13:59) [3]
    > anthems  (19.05.2007 13:53:02)  [2]

    Раз элементов нет, то не надо и обращаться.
  • anthems © (19.05.07 14:15) [4]
    Да ну ето понятно, что если там ничего нет то и лезть туда не надо, я же спрашиваю почему там ничего нет и как сделать так что бы там что-то было
  • Anatoly Podgoretsky © (19.05.07 14:59) [5]
    > anthems  (19.05.2007 14:15:04)  [4]

    У тебя ошибка в программе
  • anthems © (19.05.07 18:56) [6]
    Вот код, может забыл что где
    procedure TForm1.ShowDir(Path: string);
    var
     List: TStringList;
    begin
     List := TStringList.Create;
     try
       idFTP1.ChangeDir(Path);
       IdFTP1.TransferType := ftASCII;
       StatusBar1.Panels.Items[1].Text := Form1.idFTP1.RetrieveCurrentDir;
       DirectoryListBox.Items.Clear;
       IdFTP1.List(List);
       DirectoryListBox.Items.Assign(List);
       if DirectoryListBox.Items.Count > 0 then
           if AnsiPos('total', DirectoryListBox.Items[0]) > 0 then DirectoryListBox.Items.Delete(0);
     finally
           List.Free;
     end;
    end;

    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      if IdFTP1.Connected then
           try
             IdFTP1.Quit;
           finally
                 DirectoryListBox.Items.Clear;
                 Path := '/';
           end
       else with IdFTP1 do
             try
               Username := Edit2.Text;
               Password := Edit3.Text;
               Host := Edit1.Text;
               Connect;
               ShowDir('/');
             finally
       end;
    end;

    procedure TForm1.BitBtn2Click(Sender: TObject);
    var
     i,Count: integer;
    begin
     Count:=0;
     for i := 0 to DirectoryListBox.Count - 1 do
       if IdFTP1.DirectoryListing.Items[i].ItemType <> ditDirectory then
         Inc(Count);
     ShowMessage(IntToStr(MyCount));
    end;

  • selax (21.12.07 06:39) [7]
    Все просто.
    Нужно в uses дописать IdAllFTPListParsers
Есть новые Нет новых   [134431   +12][b:0][p:0.001]