本人写一个FTP站点文件列表的程序,功能已经实现,但是速度很慢,我实现的办法如下:
var
pdata:twin32finddata;
enum:hinternet;
r:boolean;
str:string;
FileName,DirName:Tstrings; //存储文件名和目录名
i,j:integer;
MyTreeNode1, MyTreeNode2: TTreeNode;
begin
hopen:=internetopen(pchar('hello'),0,NIL,NIL,0);
hconnection:=internetconnect(hopen,pchar(Edit_Host.Text),strtoint(Edit_Port.Text),pchar(Edit_UserName.Text),pchar(Edit_PassWord.Text),internet_service_ftp,0,255);
enum:=ftpfindfirstfile(hconnection,'*.*',pdata,0,0); //查找第一个文件
r:=enum <> nil;
FileName:=TstringList.Create;
DirName:=TstringList.Create;
while r do
begin
内部做循环
如果是目录,就调用另外一个函数,该函数跟这个函数功能一样,内部用递归调用,实现所以目录的遍历, r:=internetfindnextfile(enum,@pdata);//查找下一个文件
end;
InternetCloseHandle(enum);~~~~~~~~~~~~~
怀疑瓶颈是在InternetCloseHandle、FtpFindFirstFile和internetfindnextfile函数,问有没有其他方式实现ftp站点文件列表编程,请教
var
pdata:twin32finddata;
enum:hinternet;
r:boolean;
str:string;
FileName,DirName:Tstrings; //存储文件名和目录名
i,j:integer;
MyTreeNode1, MyTreeNode2: TTreeNode;
begin
hopen:=internetopen(pchar('hello'),0,NIL,NIL,0);
hconnection:=internetconnect(hopen,pchar(Edit_Host.Text),strtoint(Edit_Port.Text),pchar(Edit_UserName.Text),pchar(Edit_PassWord.Text),internet_service_ftp,0,255);
enum:=ftpfindfirstfile(hconnection,'*.*',pdata,0,0); //查找第一个文件
r:=enum <> nil;
FileName:=TstringList.Create;
DirName:=TstringList.Create;
while r do
begin
内部做循环
如果是目录,就调用另外一个函数,该函数跟这个函数功能一样,内部用递归调用,实现所以目录的遍历, r:=internetfindnextfile(enum,@pdata);//查找下一个文件
end;
InternetCloseHandle(enum);~~~~~~~~~~~~~
怀疑瓶颈是在InternetCloseHandle、FtpFindFirstFile和internetfindnextfile函数,问有没有其他方式实现ftp站点文件列表编程,请教
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货