ftp下载实现

//////////////////////////////////////////////////////////////////////////////////
//DownLoadFile                 //
//功能:下载指定文件                //
//参数说明:                  //
//ftpurl:  Ftp链接地址              //
//acc:   登陆ftp的帐号             //
//psw:   登陆ftp的密码             //
//farfilename: 要下载的远程文件            //
//localpath: 本地用于保存文件的目录           //
//说明:指定文件要包含路径和文件名,路径中请使用"\\",不要用"/"做为分割符   //
//////////////////////////////////////////////////////////////////////////////////.
bool CFtpTestDlg::DownLoadFile(char *ftpurl, char * acc, 
     char * psw, char * farfilename, char * localpath)
{
 //创建InternNet会话
 CInternetSession sess(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);

 CFtpConnection* pConnect = NULL; 
 CFtpFileFind *pftpfinder;
 try
 {
  //CString m_strFtpSite = "192.168.0.60";
  pConnect = sess.GetFtpConnection(ftpurl,acc,psw);
  pftpfinder = new CFtpFileFind(pConnect);

  BOOL bWorking = pftpfinder->FindFile(farfilename);
  if(bWorking)
  {
   CString localfilename(localpath);
   if(localfilename.Right(1)!="\\")
    localfilename += "\\";
   localfilename += ::PathFindFileName(farfilename);

   if(!pConnect->GetFile(farfilename,localfilename,0))
   {
    CString buf;
    buf.Format("下载文件出错;filename:%s,curlocaldir:%s",farfilename,localfilename);
    Log(buf.GetBuffer());
   }
   
  }
 // LoopDownloadDir(pConnect,pftpfinder,farpath);

 }
 catch (CInternetException* pEx)
 {
  TCHAR sz[1024];
  pEx->GetErrorMessage(sz, 1024);
  printf("ERROR!  %s\n", sz);
  pEx->Delete();
 }

 if(pftpfinder)
  delete pftpfinder;

 return true;

}


//////////////////////////////////////////////////////////////////////////////////
//DownLoadAllDirFile               //
//功能:下载指定文件夹下的内容             //
//参数说明:                  //
//ftpurl: Ftp链接地址               //
//acc:  登陆ftp的帐号              //
//psw:  登陆ftp的密码              //
//farpath: 要下载的远程目录             //
//localpath:本地用于保存文件的目录            //
//////////////////////////////////////////////////////////////////////////////////.
bool CFtpTestDlg::DownLoadAllDirFile(char *ftpurl,           
  char * acc, char * psw, char * farpath, char * localpath)
{
 //记录本地文件夹和要下载的远程文件夹
 m_strLocalDir = localpath;
 m_strFarDir = farpath;

 //创建InternNet会话
 CInternetSession sess(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);

 CFtpConnection* pConnect = NULL; 
 CFtpFileFind *pftpfinder;
 try
 {
  //CString m_strFtpSite = "192.168.0.60";
  pConnect = sess.GetFtpConnection(ftpurl,acc,psw);
  pftpfinder = new CFtpFileFind(pConnect);
  LoopDownloadDir(pConnect,pftpfinder,farpath);

 }
 catch (CInternetException* pEx)
 {
  TCHAR sz[1024];
  pEx->GetErrorMessage(sz, 1024);
  printf("ERROR!  %s\n", sz);
  pEx->Delete();
 }

 if(pftpfinder)
  delete pftpfinder;

 return true;

}
//////////////////////////////////////////////////////////////////////////////////
//LoopDownloadDir()                 //
//功能:递归下载目录内容                //
//参数说明:                   //
//pConnect:  Ftp链接指针               //
//pftpfinder: ftp文件查找指针              //
//dirpath:  递归目录               //
//////////////////////////////////////////////////////////////////////////////////.
bool CFtpTestDlg::LoopDownloadDir(CFtpConnection* pConnect,
     CFtpFileFind * pftpfinder,char * dirpath)
{
 //当前本地文件夹
 CString curlocaldir = m_strLocalDir;
 CString strbuf(dirpath);
 CString strbuf2 = strbuf.Right(strbuf.GetLength()-m_strFarDir.GetLength());
 if(strbuf2.Left(1) == "\\")  //去除最左边的"\\"
  strbuf2 =strbuf2.Right(strbuf2.GetLength()-1);
 curlocaldir = m_strLocalDir;
 if(curlocaldir.Right(1) != "\\")
  curlocaldir += "\\";
 curlocaldir += strbuf2;

 ////但前远程文件夹
 //CString curfardir = m_strFarDir;
 //if(m_strFarDir.Right(1) != "\\")
 // m_strFarDir+="\\";
 //curfardir += dirpath;


 //if(strlen(dirpath))
 // curlocaldir= m_strLocalDir + "\\" + dirpath;


 //查找任意文件
 CString allfile(dirpath);
 if(allfile.Right(1) != "\\")
  allfile += _T("\\");
 allfile += "*.*";
 BOOL bWorking = pftpfinder->FindFile(allfile);
 while(bWorking)
 {
  bWorking = pftpfinder->FindNextFile();
  CString filename = pftpfinder->GetFileName();
  Log("filename:%s",filename.GetBuffer());
  if(!pftpfinder->IsDirectory()) //文件,下载
  {
   Log("File :%s",filename.GetBuffer());
   //远程文件全名=远程目录+"\\"+文件名称
   CString farfilename(dirpath);
   if(farfilename.Right(1) != "\\")
    farfilename+="\\";
   farfilename += filename;
   //当地文件全名=当地目录+"\\"+文件名称
   CString localfilename=curlocaldir ;
   if(localfilename.Right(1) != "\\")
    localfilename+="\\";
   localfilename += filename;
   if(!pConnect->GetFile(farfilename,localfilename,0))
   {
    CString buf;
    buf.Format("下载文件出错;filename:%s,curlocaldir:%s",filename,curlocaldir);
    Log(buf.GetBuffer());
   }
  }
  else if(!pftpfinder->IsDots()) //子目录,递归下载
  {
   //定位当地子文件夹
   CString localsubdir = curlocaldir;
   if(localsubdir.Right(1) != "\\")
    localsubdir+="\\";
   localsubdir += filename;
   //定位远程子文件夹
   CString farsubdir = dirpath;
   if(farsubdir.Right(1) != "\\")
    farsubdir+="\\";
   farsubdir += filename;

   //查找并添加本地文件夹
   CFileFind   finder;   
   if(finder.FindFile(localsubdir)==FALSE)   
   {   
    if(!CreateDirectory(localsubdir,NULL))
     Log("Create dir flase! :%s",localsubdir);
   }   
   finder.Close(); 

   Log("Dir  :%s",localsubdir.GetBuffer());
            LoopDownloadDir(pConnect,pftpfinder,farsubdir.GetBuffer());
   bool bfint = pftpfinder->FindFile(allfile);
   //重新定位本层查找    //这里应该有更好的实现方法
   while(bfint)
   {
    bfint = pftpfinder->FindNextFile();
    if(pftpfinder->GetFileName() == filename)
     break;
   }
  }
 }
 return true;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值