编写了一个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;
到底是哪边错了额`````
包括文件名字,类型,修改时间~
显示不成功艾
还是不怎么会写代码,在网上看到有类似的就参照了下
下面是代码,还请各位帮看看
总是提示说 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;
到底是哪边错了额`````
但运行自己编写的 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就可以没越界提示,但是大小时间什么的 收获不准确~
想知道是不是和这段有关系,如果有的话要怎么改呢
一开始看这段的时候还研究过,有些不解
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]; // 时间这个以后 得到的文件类型和大小却不对~
敬请帮助~
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;我试了下没有啥问题。
主要是想解决 用listview怎么显示出远程的文件名字,类型,大小,和修改时间呢,~
接着寻求帮助ING