编写了一个FTP上传程序,中间有段要获得远程目录
包括文件名字,类型,修改时间~
显示不成功艾
还是不怎么会写代码,在网上看到有类似的就参照了下
下面是代码,还请各位帮看看 
总是提示说 Index out of bound(5)
谢谢了~ 
procedure TForm1.ChangeDir(DirName: String);//更新目录
var
  i,j,iname:integer;
  Tstr1:Tstrings;
  Tstr2:Tstringlist;
  str,strtime,strname,strsize,strtype:string;
  list1:Tlistitem;
begin
  Tstr1:= Tstrings.create;
  Tstr2:= Tstringlist.create;
  IdFTP1.ChangeDir(DirName);
  IdFTP1.TransferType:=ftASCII;//ftbinary;   //
  if edit6.Items.IndexOf(IdFTP1.RetrieveCurrentDir)=-1 then
  edit6.Items.Add(IdFTP1.RetrieveCurrentDir);
  edit6.Text:=IdFTP1.RetrieveCurrentDir;       //显示目录
  Listview1.clear;
  IdFTP1.List(DirectoryListbox.Items);
  Tstr1:=Idftp1.Listresult;  for i:=0 to Tstr1.Count -1 do
  begin
  List1:=Listview1.Items.Add;
  Tstr2.CommaText:=Tstr1[i];
  strtime:=Tstr2.Strings[5]+' '+Tstr2.Strings[6] +' '+Tstr2.Strings[7];
  strsize:= Tstr2.Strings[4];
  strsize:=formatfloat('0',strtoint(strsize)/1000)+'KB';            // 大小
  if copy(Tstr2.Strings[0],1,1)='d' then strtype:='文件夹' else strtype:='文件';  //类型
  if strtype='文件夹' then
  begin
  list1.ImageIndex:=0;
  strsize:='';
  end
  else
  list1.ImageIndex:=1;
  strname:='';  for j:=8 to Tstr2.count-1 do
  begin
  Strname:=Strname+''+Tstr2.Strings[j];
  end;
  strname:=trim(strname);
  list1.caption:=strname;
  list1.SubItems.Add(strtype);       //类型
  list1.SubItems.Add(strsize);        // 大小
  list1.SubItems.Add(strtime);        // 时间
  end;
  //Listview1ColumnClick(Listview1,Listview1.Columns[0]);
  exit;
 end;
到底是哪边错了额`````

解决方案 »

  1.   

    在哪出的错,检查一下for循环,是不是有越界
      

  2.   

    应该不是越界,这段程序在SERV-U下可以正常的运行,或者是  SER-U自动下载远程目录?   
    但运行自己编写的 FTP服务器时 就不能正常运行了,显示不出来远程目录~ 
    for i:=0 to Tstr1.Count -1 do
      begin
      List1:=Listview1.Items.Add;
      Tstr2.CommaText:=Tstr1[i];
      strtime:=Tstr2.Strings[5]+' '+Tstr2.Strings[6] +' '+Tstr2.Strings[7];
      strsize:= Tstr2.Strings[4];
      strsize:=formatfloat('0',strtoint(strsize)/1000)+'KB';            // 大小
      if copy(Tstr2.Strings[0],1,1)='d' then strtype:='文件夹' else strtype:='文件';  //类型
      其中的这段  将Tstr2.Strings[i]的下标改为3就可以没越界提示,但是大小时间什么的   收获不准确~
    想知道是不是和这段有关系,如果有的话要怎么改呢
    一开始看这段的时候还研究过,有些不解
      

  3.   

    Tstr2是如何赋值的,就是它越界了,Tstr2.Strings[5]已经不存在了
      

  4.   

    改成
    List1:=Listview1.Items.Add;
      Tstr2.CommaText:=Tstr1[i];
      strname:= Tstr2.Strings[3];
      strsize:= Tstr2.Strings[2];               //大小
      if strsize<>'<DIR>' then
      strsize:=formatfloat('0',strtoint(strsize)/1000)+'KB';
      strtime:=Tstr2.Strings[0];           // 时间这个以后 得到的文件类型和大小却不对~
    敬请帮助~  
      

  5.   

    procedure TfrmMain.Button1Click(Sender: TObject);
    var
      i,j,iname:integer;
      Tstr1:Tstrings;
      Tstr2:Tstringlist;
      str,strtime,strname,strsize,strtype:string;
      list1:Tlistitem;
    begin
      Tstr1:= Tstrings.create;
      Tstr2:= Tstringlist.create;
      IdFTP1.ChangeDir(edtDir.text);
      IdFTP1.TransferType:=ftASCII;//ftbinary;   //
      if edit6.Items.IndexOf(IdFTP1.RetrieveCurrentDir)=-1 then
      edit6.Items.Add(IdFTP1.RetrieveCurrentDir);
      edit6.Text:=IdFTP1.RetrieveCurrentDir;       //显示目录
      Listview1.clear;
      //IdFTP1.List(edtDir);
      Tstr1:=Idftp1.Listresult;  for i:=0 to Tstr1.Count -1 do
      begin
      List1:=Listview1.Items.Add;
      Tstr2.CommaText:=Tstr1[i];
      strtime:=Tstr2.Strings[5]+' '+Tstr2.Strings[6] +' '+Tstr2.Strings[7];
      strsize:= Tstr2.Strings[4];
      strsize:=formatfloat('0',strtoint(strsize)/1000)+'KB';            // 大小
      if copy(Tstr2.Strings[0],1,1)='d' then strtype:='文件夹' else strtype:='文件';  //类型
      if strtype='文件夹' then
      begin
      list1.ImageIndex:=0;
      strsize:='';
      end
      else
      list1.ImageIndex:=1;
      strname:='';  for j:=8 to Tstr2.count-1 do
      begin
      Strname:=Strname+''+Tstr2.Strings[j];
      end;
      strname:=trim(strname);
      list1.caption:=strname;
      list1.SubItems.Add(strtype);       //类型
      list1.SubItems.Add(strsize);        // 大小
      list1.SubItems.Add(strtime);        // 时间
      end;
      //Listview1ColumnClick(Listview1,Listview1.Columns[0]);
      exit;
    end;我试了下没有啥问题。
      

  6.   

    不知道楼上的是在什么环境下实验的  我在SER-U底下可以  但是到了 自己编写的 FTP服务器下就不可以了 
    主要是想解决  用listview怎么显示出远程的文件名字,类型,大小,和修改时间呢,~ 
    接着寻求帮助ING