-
После соединения с фтп сервером и забивания каталогов в ListBox, пытаюсь определить файл это или папка
if IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].ItemType =ditDirectory выпадает ошибка - "List index out of bounds" при етом - IdFTP1.DirectoryListing.Items.Count = 0 IdFTP1.DirectoryListing.DirectoryName пустое
работаю с 2005 дельфой. Заранее благодарен за все предложенные варианты решения проблемы.
-
Зачем же ты обращаешься к списку если у тебя нет элементов? Да и вообще сама идея странная, по индексу из одного списка обращаться к индексу другого списка, замучаешься с синхронизацией, в одном 3 в другом 10.
-
В этом то и проблема, что элементов нету а должны быть, может я чего не понимаю в работе этого компонента, поэтому и прошу помощи )
-
> anthems (19.05.2007 13:53:02) [2]
Раз элементов нет, то не надо и обращаться.
-
Да ну ето понятно, что если там ничего нет то и лезть туда не надо, я же спрашиваю почему там ничего нет и как сделать так что бы там что-то было
-
> anthems (19.05.2007 14:15:04) [4]
У тебя ошибка в программе
-
Вот код, может забыл что где 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;
-
Все просто. Нужно в uses дописать IdAllFTPListParsers
|