下面这一小段Delphi写的程序转为CBuilder下的,大家帮忙看看写的对不对?(Delphi不熟悉,拜托了!)
{ 下载整个目录,并遍历所有子目录首先 ChangeDir(Root) 到根目录然后创建本地目录 + RemoteDir然后用 list 得到所有目录名循环判断,进入 RemoteDir 目录内部如果是目录继续第归。否则 get 该文件到本地目录,当 get 完所有文件后返回上一级目录用List再取得信息,继续循环}
Procedure FTP_DownloadDir(var idFTP : TIdFtp;RemoteDir,LocalDir : string);
label Files ;
var
i,DirCount : integer;
begin
if not DirectoryExists(LocalDir + RemoteDir) then
ForceDirectories(LocalDir + RemoteDir);
idFTP.ChangeDir(RemoteDir);
idFTP.List(nil);
DirCount := idFTP.DirectoryListing.Count ;
if DirCount = 0 then
begin
idFTP.ChangeDirUp;
idFTP.List(nil);
end;
for i := 0 to DirCount - 1 do
begin
if DirCount <> idFTP.DirectoryListing.Count then
begin
repeat
idFTP.ChangeDirUp;
idFTP.List(nil);
until DirCount = idFTP.DirectoryListing.Count ;
end;
if idFTP.DirectoryListing[i].ItemType = ditDirectory then
FTP_DownloadDir(idFTP,idFTP.DirectoryListing[i].FileName,LocalDir + RemoteDir + '\')
else begin
idFTP.Get(idFTP.DirectoryListing[i].FileName,LocalDir + RemoteDir + '\' +
idFTP.DirectoryListing[i].FileName,true);
Form1.lb_num.Caption := IntToStr(StrToInt(Form1.lb_num.Caption) + 1);
Form1.lb_num.Update;
if i = DirCount - 1 then
begin
idFTP.ChangeDirUp;
idFTP.List(nil);
end;
end;
end;
end;
//-------------------------------------------------------------------------------------------------
转换为CBuilder的程序如下:
bool __fastcall FTP_DownLoadThread::FTP_DownloadDir(AnsiString RemoteDir,AnsiString LocalDir,TIdFTP *idFtp)
{
int i,DirCount;
AnsiString RemoteFileName,tempRemoteDir;
bool Result=true;
TStringList *Ls=new TStringList();
try
{
if (!DirectoryExists(LocalDir +"\\"+RemoteDir))//判断本地是否存在对应路径
ForceDirectories(LocalDir +"\\"+RemoteDir); //如果不存在就创建
idFtp->ChangeDir(RemoteDir);//进入远端服务器目录
idFtp->List(Ls);//列出远端服务器目录
DirCount=idFtp->DirectoryListing->Count;//统计文件和文件夹的个数
if(DirCount== 0)
{
idFtp->ChangeDirUp();
idFtp->List(Ls);
}
for(i=0;i <DirCount;i++)
{
while(DirCount!=idFtp->DirectoryListing->Count)
{
idFtp->ChangeDirUp();
idFtp->List(Ls);
}
if (idFtp->DirectoryListing->Items[i]->ItemType == ditDirectory)
{
FTP_DownloadDir(idFtp->DirectoryListing->Items[i]->FileName,LocalDir +"\\"+ RemoteDir ,idFtp);//如果是目录,继续递归
}
else//如果是文件,则下载!
{
idFtp->TransferType = ftBinary;
idFtp->Get(idFtp->DirectoryListing->Items[i]->FileName,LocalDir+"\\"+ RemoteDir + "\\" +idFtp->DirectoryListing->Items[i]->FileName,true);//下载文件
Form1->Memo1->Lines->Add("影像文件"+idFtp->DirectoryListing->Items[i]->FileName+"下载完毕!");
}
if(i == DirCount-1)
{
if(tempRemoteDir!=idFtp->RetrieveCurrentDir())
{
idFtp->ChangeDirUp();
idFtp->List(Ls);
}
}
}
}
catch(Exception &e )
{
Result=false;
}
return Result;
}