S
superdba
Unregistered / Unconfirmed
GUEST, unregistred user!
开发环境:windows 2000 个人版
开发工具:delphi 2005
以下程序原来[red]在delphi 7下开发调试通过(使用indy9),运行正常,[/red]但把相同程序[red]在delphi 2005下以win32程序方式打开并调试(使用indy10),则出现错误提示[/red]:error message:list index out of bounds(0)
由于在以下的 if IdFTP1.DirectoryListing.Items[FileCount].ItemType = ditDirectory then
这行程序提示index out of bounds(0)出错,我分析可能directorylisting.items并没有获取到任何集合元素?所以访问集合内元素报出界,但不知道具体出错原因在哪里,如何解决,请大家指点迷津,谢谢!
procedure TfrmFtpClient.ChageDir(DirName: String);
Var
LS: TStringList;
FileCount,total : Integer;
newItem : TListItem;
begin
//延时半秒
DelayTime(GTick);
LS := TStringList.Create;
try
try
Idftp1.ChangeDir(DirName);
except
//IdFTP1.Quit;
//注释掉,Michael,20050429----
{IdFTP1.Connect(true);
IdFTP1.ChangeDir(DirName);
}
//---------------------------
end;
// IdFTP1.TransferType := ftASCII;
//延时半秒
DelayTime(GTick);
try
//gCurrentDir:=CurrentDirEdit.Text;
IdFTP1.List(LS,'*',False);
//延时半秒
DelayTime(GTick);
//CurrentDirEdit.Text:= IdFTP1.RetrieveCurrentDir;
CurrentDirEdit.Text:= DirName;
except
on e:exception do
geterrmsg(e);
end;
//延时半秒
DelayTime(GTick);
ListViewRemoteFile.Items.BeginUpdate;
ListViewRemoteFile.Items.Clear;
//IdFTP1.DirectoryListing.ListFormat:=flfUnix;
total:=LS.Count - 1;
for FileCount:=0 to total do
begin
//是目录吗?
[red]if IdFTP1.DirectoryListing.Items[FileCount].ItemType = ditDirectory then[/red]
//在上行提示index out of bounds(0)出错
begin
//添加目录项目
newItem := ListViewRemoteFile.Items.Insert(0);
newItem.ImageIndex := 0; //图标序号
newItem.subItems.Add('文件夹');
end else
begin
//添加文件项目
newItem := ListViewRemoteFile.Items.Add;
newItem.ImageIndex := 1; //图标序号
newItem.subItems.Add('文件');
end ;
newItem.Caption := IdFTP1.DirectoryListing.Items[FileCount].FileName; //文件名
newItem.subItems.Add(IntToStr(IdFTP1.DirectoryListing.Items[FileCount].Size)); //文件大小
newItem.subItems.Add(DateTimeToStr(IdFTP1.DirectoryListing.Items[FileCount].ModifiedDate)); //时间
end;
ListViewRemoteFile.Items.EndUpdate;
finally
LS.Free;
end;
end;
开发工具:delphi 2005
以下程序原来[red]在delphi 7下开发调试通过(使用indy9),运行正常,[/red]但把相同程序[red]在delphi 2005下以win32程序方式打开并调试(使用indy10),则出现错误提示[/red]:error message:list index out of bounds(0)
由于在以下的 if IdFTP1.DirectoryListing.Items[FileCount].ItemType = ditDirectory then
这行程序提示index out of bounds(0)出错,我分析可能directorylisting.items并没有获取到任何集合元素?所以访问集合内元素报出界,但不知道具体出错原因在哪里,如何解决,请大家指点迷津,谢谢!
procedure TfrmFtpClient.ChageDir(DirName: String);
Var
LS: TStringList;
FileCount,total : Integer;
newItem : TListItem;
begin
//延时半秒
DelayTime(GTick);
LS := TStringList.Create;
try
try
Idftp1.ChangeDir(DirName);
except
//IdFTP1.Quit;
//注释掉,Michael,20050429----
{IdFTP1.Connect(true);
IdFTP1.ChangeDir(DirName);
}
//---------------------------
end;
// IdFTP1.TransferType := ftASCII;
//延时半秒
DelayTime(GTick);
try
//gCurrentDir:=CurrentDirEdit.Text;
IdFTP1.List(LS,'*',False);
//延时半秒
DelayTime(GTick);
//CurrentDirEdit.Text:= IdFTP1.RetrieveCurrentDir;
CurrentDirEdit.Text:= DirName;
except
on e:exception do
geterrmsg(e);
end;
//延时半秒
DelayTime(GTick);
ListViewRemoteFile.Items.BeginUpdate;
ListViewRemoteFile.Items.Clear;
//IdFTP1.DirectoryListing.ListFormat:=flfUnix;
total:=LS.Count - 1;
for FileCount:=0 to total do
begin
//是目录吗?
[red]if IdFTP1.DirectoryListing.Items[FileCount].ItemType = ditDirectory then[/red]
//在上行提示index out of bounds(0)出错
begin
//添加目录项目
newItem := ListViewRemoteFile.Items.Insert(0);
newItem.ImageIndex := 0; //图标序号
newItem.subItems.Add('文件夹');
end else
begin
//添加文件项目
newItem := ListViewRemoteFile.Items.Add;
newItem.ImageIndex := 1; //图标序号
newItem.subItems.Add('文件');
end ;
newItem.Caption := IdFTP1.DirectoryListing.Items[FileCount].FileName; //文件名
newItem.subItems.Add(IntToStr(IdFTP1.DirectoryListing.Items[FileCount].Size)); //文件大小
newItem.subItems.Add(DateTimeToStr(IdFTP1.DirectoryListing.Items[FileCount].ModifiedDate)); //时间
end;
ListViewRemoteFile.Items.EndUpdate;
finally
LS.Free;
end;
end;