获得ftp服务器上文件名和长度,怎么获得FTP服务器上目录下的所有文件名和子目录...

当前位置:我的异常网» Delphi » 怎么获得FTP服务器上目录下的所有文件名和子目录

怎么获得FTP服务器上目录下的所有文件名和子目录

www.myexceptions.net  网友分享于:2015-08-26  浏览:560次

如何获得FTP服务器上目录下的所有文件名和子目录

我用的是indy   10   的tidftp控件,请问如何获得FTP服务器上目录下的所有文件名和子目录,先谢谢了

------解决方案--------------------

这是我做的FTP搜索工具中搜索线程的主要代码,还有不要使用tidftp,长时间搜索会出现死锁现象,使用WinInet单元

www.ftpff.com

procedure TFtpScan.Execute;

var

FFTPHandle: HINTERNET;

FInetHandle: HINTERNET;

Enum: HINTERNET;

FFindFileData: WIN32_FIND_DATA;

R: Boolean;

FFileName, DataStr: string;

TempErrorCode: Cardinal;

begin

Sleep(100);

Application.Initialize;

FInetHandle := InternetOpen(PChar(ThreadRecord.SiteName), 0, nil, nil, 0);

FFTPHandle := InternetConnect(FInetHandle, PChar(ThreadRecord.Host), ThreadRecord.Port, PChar(ThreadRecord.UserName), PChar(ThreadRecord.UserPassWord), INTERNET_SERVICE_FTP, 0, 255);

if (FFTPHandle = nil) and (not Terminated) then

begin //登陆服务器失败,关闭句柄,记录错误,重新连接

CloseFTPHandle(FInetHandle, FFTPHandle);

EnterCriticalSection(CS);

OnError( 'InternetConnect ', ' ', GetLastError);

LeaveCriticalSection(CS);

ReTryConnection(ThreadRecord);

Exit;

end;

while (ThreadRecord.FFTPDir.Count > 0) and (not Terminated) do

begin

if (FFTPHandle = nil) or (FInetHandle = nil) then

begin

CloseFTPHandle(FInetHandle, FFTPHandle);

EnterCriticalSection(CS);

OnError( 'Handle ', ' ', GetLastError);

LeaveCriticalSection(CS);

ReTryConnection(ThreadRecord);

Exit;

end;

if FtpSetCurrentDirectory(FFTPHandle, PChar(ThreadRecord.FFTPDir.Strings[0])) = False then

begin

EnterCriticalSection(CS);

OnError( 'FtpSetCurrentDirectory ', ThreadRecord.FFTPDir.Strings[0], GetLastError);

LeaveCriticalSection(CS);

ThreadRecord.FFTPDir.Delete(0);

CloseFTPHandle(FInetHandle, FFTPHandle);

ReTryConnection(ThreadRecord);

Exit;

end;

Enum := FtpFindFirstFile(FFTPHandle, PChar( '*.* '), FFindFileData, 0, 0);

if Enum = nil then

begin

TempErrorCode := GetLastError;

if TempErrorCode <> 18 then

begin

EnterCriticalSection(CS);

OnError( 'FtpFindFirstFile ', ThreadRecord.FFTPDir.Strings[0], TempErrorCode);

LeaveCriticalSection(CS);

CloseFTPHandle(FInetHandle, FFTPHandle);

ReTryConnection(ThreadRecord);

Exit;

end;

end;

R := Enum <> nil;

while R do

begin

FFileName := FFindFileData.cFileName;

if (FFileName <> '. ') and (FFileName <> '.. ') then

begin

if FFindFileData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then

begin

Inc(ThreadRecord.FileDirCount);

OnFTPFindDir(ThreadRecord.FFTPDir.Strings[0] + FFileName + '/ ');

ThreadRecord.FFTPDir.Add(ThreadRecord.FFTPDir.Strings[0] + FFileName + '/ ');

end

else

begin

Inc(ThreadRecord.FileCount);

DataStr := DataStr + ' | ' + FFileName + ' ' + FileSizeToStr(FFindFileData.nFileSizeLow);

//OnFTPFindFile(ThreadRecord.FFTPDir.Strings[0], FFileName, FFindFileData.nFileSizeLow);

end;

end;

R := InternetFindNextFile(Enum, @FFindFileData);

end;

if DataStr <> ' ' then

SaveTOAccess(ThreadRecord.FFTPDir.Strings[0], DataStr);

DataStr := ' ';

InternetCloseHandle(Enum);

ThreadRecord.FFTPDir.Delete(0);

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值