如何FTP客户端的多级遍历?

zhuangbin 2005-04-22 08:49:05
我想写一FTP客户端的程序,可以实现上传和下载功能,现在已基本实现.
但我想在开始输入时就能看到FTP上的所有资源列表.比如在文件<<编程>>下有一子文件<<c语言课件>>,我想直接看到<<c语言课件>>下的目录,不知该怎样实现?
我用NMFTP1->ChangeDir(文件名); NMFTP1->List();实现时一次只能看一个文件下的目录.不只该怎样用遍历算法实现,可以帮一下忙吗,在线等?
...全文
189 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuangbin 2005-05-11
  • 打赏
  • 举报
回复
还有没有其他可以实现的方法呀?
子非鱼0724 2005-05-01
  • 打赏
  • 举报
回复
用names指针数组 保存对方FTP上目录结构,再遍历
ftpjiang() ;AnsiString *names[200]; 在头文件声明运行连接通过
但生成的EXE文件,有点问题。请高手再改改 。读内存错误
子非鱼0724 2005-05-01
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button16Click(TObject *Sender)
{int a=0,b=1;
int j=0;
AnsiString filename[100];
AnsiString * pointer;
NMFTP1->List();
for(int i=0;i<NMFTP1->FTPDirectoryList->name->Count;i++)
{if(NMFTP1->FTPDirectoryList->name->Strings[i]==0)
filename[j++]=NMFTP1->FTPDirectoryList->name->Strings[i]; }
filename[j]=NULL;
names[0]=filename;
while(a<b)
{for(int k=0; ;k++)
{if(*(names[a]+k)==NULL)
break;
pointer=ftpjiang(names[a]+k);
if(pointer==NULL)
names[b++]=pointer;
}
a++;
}


Memo1->Clear();
for(int c=0;c<=b;c++)
{ for(int m=0; ;m++)
{if(*(names[c]+m)==NULL)
break;
NMFTP1->Disconnect();
NMFTP1->Host=Edit1->Text;
NMFTP1->Port=StrToInt(Edit2->Text);
NMFTP1->UserID=Edit3->Text;
NMFTP1->Password=Edit4->Text;
NMFTP1->Connect();
NMFTP1->ChangeDir(*(names[c]+m));
NMFTP1->List();}
if(c>b)
Memo1->Lines->Add("遍历完毕");
}
}





AnsiString * TForm1::ftpjiang(AnsiString *p)
{int j;
AnsiString filenames[50];
NMFTP1->Disconnect();
NMFTP1->Host=Edit1->Text;
NMFTP1->Port=StrToInt(Edit2->Text);
NMFTP1->UserID=Edit3->Text;
NMFTP1->Password=Edit4->Text;
NMFTP1->Connect();
NMFTP1->ChangeDir(*p);
NMFTP1->List();
for(j=0;j<NMFTP1->FTPDirectoryList->name->Count;j++)
{if(NMFTP1->FTPDirectoryList->name->Strings[j]==0)
filenames[j++]=NMFTP1->FTPDirectoryList->name->Strings[j];}
filenames[j]=NULL;
if(j==1) //no filefold
return NULL;
else return filenames;
}
zhuangbin 2005-04-29
  • 打赏
  • 举报
回复

马上就到五一了,先祝大家节日快乐,玩得开心!!
zhuangbin 2005-04-29
  • 打赏
  • 举报
回复
我通过修改dargons(赤龙)的程序发现可以实现二级遍历,具体程序如下:

Memo1->Text=""; 
NMFTP1->List();
int I,j=0;
AnsiString name[100];
for (I =0; I <= (NMFTP1->FTPDirectoryList->name->Count - 1); I++)
{
if(NMFTP1->FTPDirectoryList->Size->Strings[I]==0)
{
Memo1->Lines->Add(NMFTP1->FTPDirectoryList->name->Strings[I]);
name[j]= NMFTP1->FTPDirectoryList->name->Strings[I];
j++;
}

}
Memo1->Lines->Add(j-2);
Memo1->Lines->Add("二级目录:");
j=j-1;

while(j>1)

{
Memo1->Lines->Add(" ");
NMFTP1->Disconnect(); //重新连接
NMFTP1->Host=Edit1->Text;
NMFTP1->Port=StrToInt(Edit2->Text);
NMFTP1->UserID=Edit3->Text;
NMFTP1->Password=Edit4->Text;
NMFTP1->Connect();


NMFTP1->ChangeDir(name[j]);
Memo1->Lines->Add(NMFTP1->CurrentDir);
Memo1->Lines->Add(name[j--]);

NMFTP1->List();

}

Memo1->Lines->Add("完毕");

但好象只能实现二级,再往下就不行了,大家可以给看一下,下面给怎么进行吗?


希望大家也能给出一段程序来,让兄弟参考一下,先谢了!
NetSpider9804040 2005-04-28
  • 打赏
  • 举报
回复
我也同意楼上的说法,生成一个目录树结构文件,包保到本机,然后按照本机的这个文件列表对结合NMFTP的ChangeDir()方法进行遍历!
zsloyes 2005-04-28
  • 打赏
  • 举报
回复
关注中,最近也准备开发类似的程序
constantine 2005-04-28
  • 打赏
  • 举报
回复
他好像只能通过changedir改变得到所有路径跟文件列表,你可以考虑把那个树结构保存到机子上
zhuangbin 2005-04-28
  • 打赏
  • 举报
回复

大家有没有好的遍历算法,利用一般的遍历方法实现起来好象有一定的困难呀!

它好象每次都只响应一次,不论怎样,它好象都显示的是同一个文件夹之下的目录.

请大家帮忙看一下,谢谢了!!
NetSpider9804040 2005-04-22
  • 打赏
  • 举报
回复
同意楼上,不过NMFTP的list()方法有一定问题!
dargons 2005-04-22
  • 打赏
  • 举报
回复
你可以试一下这段程序:
先将FTP的ParseList属性值为true; 再根据文件的大小,调用NMFTP1->ChangeDir()方法来实现.

Memo1->Text=""; 
NMFTP1->List();
int I,j=0,J=NMFTP1->FTPDirectoryList->name->Count - 1;  
AnsiString name[100];
for (I =0; I <= (NMFTP1->FTPDirectoryList->name->Count - 1); I++)
{
if(NMFTP1->FTPDirectoryList->Size->Strings[I]==0)
{
Memo1->Lines->Add(NMFTP1->FTPDirectoryList->name->Strings[I]);
name[j]= NMFTP1->FTPDirectoryList->name->Strings[I];
j++;
}

}
j=j-1;
while(j>1)
{

Memo1->Lines->Add(name[j]);

NMFTP1->ChangeDir(name[j--]);
NMFTP1->List();
}

Memo1->Lines->Add("完毕");
zhuangbin 2005-04-22
  • 打赏
  • 举报
回复

我刚刚试了一下,好象只能显示其中一个子文件下的目录.

而且用Memo1->Lines->Add(NMFTP1->CurrentDir);进行测试时发现它们都在同一个子文件目录下.

有没有其他可以实现的方法呀??

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧