这是什么原因。。。。。。(50分)

  • 主题发起人 主题发起人 lili365
  • 开始时间 开始时间
L

lili365

Unregistered / Unconfirmed
GUEST, unregistred user!
我在写FTP程序时,如果做上载或下载文件,则产生INDEX LIST OUT OF BOUNDS(数字)
错误,是什么原因,如何解决,最好用代码解析。
那位样例,请送我一份,不胜感激!
 
INDEX LIST OUT OF BOUNDS 一般是访问越界了,具体原因要看你的代码。
 
to wjiachun:
我知道可能是这个原因,但我不知如何来改进,部分测试代码如下:
unit ftpmain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,ftpdlg, Psock, NMFtp;

type
Tmain = class(TForm)
lst_local: TListBox;
lst_remote: TListBox;
btn_connect: TButton;
btn_close: TButton;
btn_up: TButton;
btn_down: TButton;
btn_delete: TButton;
NMFTP1: TNMFTP;
sdg_local: TSaveDialog;
procedure btn_closeClick(Sender: TObject);
procedure btn_connectClick(Sender: TObject);
procedure NMFTP1Connect(Sender: TObject);
procedure NMFTP1ListItem(Listing: String);
procedure lst_remoteClick(Sender: TObject);
procedure btn_downClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
m_host:string;
m_user:string;
m_pwd:string;
m_mode:integer;

name:string;
attr:string;
sign:string;
index:integer;
end;

var
main: Tmain;

implementation

{$R *.DFM}

procedure Tmain.btn_closeClick(Sender: TObject);
begin
close;
end;

procedure Tmain.btn_connectClick(Sender: TObject);
begin

dlgconnect.ShowModal;
// dlgconnect.edt_host.SetFocus;

end;

procedure Tmain.NMFTP1Connect(Sender: TObject);
begin

try
NMFTP1.ParseList:=true;
NMFTP1.Vendor := NMOS_AUTO;
lst_remote.Clear;
NMFTP1.List;
except
NMFTP1.Disconnect;
showmessage('connect is error');
end;
end;

procedure Tmain.NMFTP1ListItem(Listing: String);
begin
lst_remote.Items.Add(listing);
end;

procedure Tmain.lst_remoteClick(Sender: TObject);
begin
btn_down.Enabled:=true;
btn_delete.Enabled:=true;
index:=lst_remote.ItemIndex;
name:=nmftp1.FTPDirectoryList.name.Strings[index];
attr:=nmftp1.FTPDirectoryList.Attribute.strings[index];
sign:=copy(attr,0,1);
end;

procedure Tmain.btn_downClick(Sender: TObject);
begin
if attr='d' then
showmessage('Directory is not download');
if sdg_local.Execute then
begin
nmftp1.Download(name,sdg_local.FileName);
end;
end;

end.

 
跟踪一下,是不是在这儿出错:
name:=nmftp1.FTPDirectoryList.name.Strings[index];
attr:=nmftp1.FTPDirectoryList.Attribute.strings[index];
 
我知道是这的问题,但我实在找不出错在什么地方
 
你可以INDEX少取1试试,即从0开始到INDEX-1
然后自己看着办
 
我单步调试过INDEX是没有问题的,但不管我采用什么方式NMFTP1。FTP*属性调用
都出错(我不用INDEX),是不是环境有问题呢?我用的是DELPHI4的CLIENT/SERVER
有谁知道,请帮忙,我将倾我所有,以后再贷款。
 
我一直在做FTP方面的程序,NMFTP虽然有BUG,但不可能出现这种错误,你再仔细检查一下所
TList类的变量,肯定是这方面的原因。
还有,劝你尽量别用FastNet那套东西,实在要用也要少用NMFtp.List,否则你可千万要当
心。
 
to 教父:
有没有好的EXAMPLE或提供一个具体的思路,谢谢!
 
Delphi本身自带了一个FTP的例子。

具体的思路我也不知道怎么说,但是“INDEX LIST OUT OF BOUNDS”这种错误只可能和List
类有关。
 
TListBox.ItemIndex 是从0开始的,当一个都没选是-1;
 
试试:
index:=lst_remote.ItemIndex;
if (index <> -1) and (index<nmftp1.FTPDirectoryList.name.Count) then
name:=nmftp1.FTPDirectoryList.name.Strings[index];
if (index <> -1) and (index<nmftp1.FTPDirectoryList.Attribute.Count) then
attr:=nmftp1.FTPDirectoryList.Attribute.strings[index];
sign:=copy(attr,0,1);
 
多人接受答案了。
 
后退
顶部