我用的是indy 10 的tidftp控件,请问如何获得FTP服务器上目录下的所有文件名和子目录,先谢谢了
解决方案 »
- 实现自动刷新网址.
- 电信局是如何监控一条线多机上网的?
- 怎么样将 东经118度24分-119度48分和北纬34度-35度07分之间的地图准确的定位到地图
- 急救:如何着手看一个别人的erp程序源代码?
- 关于判断一字符是否为数字(0-9)的问题?很简单的!
- 救命啊,我受不了了!关于多次查询!第二帖!200分了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 三天内学会用Delhpi?
- 小case
- 在DELPHI程序中如何自动创建SQL SERVER 数据库表?
- 对算法有兴趣吗?如何找到数组中重复的数。要注意复杂度哦!
- 【重定向】使用 wininet 中的什么方法可以得到一个URL的重定向地址?
- 找书中文电子版<企业应用架构模式>
www.ftpff.comprocedure 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);
Sleep(20);
end;
Form1.ListView1.Items.Item[ThreadRecord.FTPThreadNUM].SubItems.Strings[0] := '收集完毕';
Form1.ListView1.Items.Item[ThreadRecord.FTPThreadNUM].SubItems.Strings[4] := DateTimeToStr(Now);
end;