Chinaunix首页 | 论坛 | 博客
  • 博客访问: 756111
  • 博文数量: 128
  • 博客积分: 7079
  • 博客等级: 少将
  • 技术积分: 1326
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-16 08:53
文章分类

全部博文(128)

文章存档

2011年(3)

2010年(12)

2009年(9)

2008年(23)

2007年(61)

2006年(20)

我的朋友

分类: C/C++

2006-12-29 13:22:05

最近写的一个到指定FTP下载服务器上下载的函数,主要用到类有CInternetSession,CFtpConnection
 具体内容看代码吧,这个不能的!虽然很简单,不值得往外写,但我想收藏起来留着以后用也是很有意义的。
/************************************************************************/
/* 到指定的FTP服务器上下载的函数                                       */
/* liuxwin                                                              */
/* 20006.12.29                                                          */
/* 返回值: 成功 TRUE, 失败 FALSE                                      */
/*
参数说明:
 FtpPath   要下载的ftp 目录或文件
 localPath    保存到本地的目录
 ftpAdd       ftp地址
 ftpSuser   登陆ftp的用户名
 ftpPass       登陆ftp的密码
 sErr          发生错误时,返回的错误信息*/
                                                       
/************************************************************************/
BOOL GetFileFromFTP( CString FtpPath, CString LocalPath ,CString ftpAdd, CString ftpUser, CString ftpPass, CString &sErr )
{
 CString sTemp ;
 CString sLocalTemp ;
 CString sTempFtpPath ;
 CInternetSession  pInternetCon(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);
 CFtpConnection *pFtpCon ;
 try
 {
  pFtpCon =pInternetCon.GetFtpConnection( ftpAdd, ftpUser, ftpPass, INTERNET_DEFAULT_FTP_PORT );
  if ( pFtpCon != NULL)
  {
   CFtpFileFind FtpFinder( pFtpCon ) ;
   BOOL bWork = FtpFinder.FindFile( FtpPath );
   while ( bWork )
   {
    bWork = FtpFinder.FindNextFile() ;
    if ( FtpFinder.IsDots() )
     continue;
    if(FtpFinder.IsDirectory() )
    {  //是目录
     sTemp.Empty() ;
     sTemp = FtpFinder.GetFileName() ;
     sTempFtpPath.Empty() ;
     sTempFtpPath = FtpPath + "/"+ sTemp  ;
     sLocalTemp.Empty() ;
     sLocalTemp = LocalPath + "\\" + sTemp ;
     CFileStatus   rStatus;
     if( !( CFile::GetStatus( sLocalTemp, rStatus ) ) )
     {//文件夹不存在, 创建之
      if( !(CreateDirectory((LPCTSTR)sLocalTemp, NULL)) )
      {//创建失败
       DWORD dErr = GetLastError() ;
       sErr.Format( "创建新目录失败: ERROR  %d" ,dErr ) ;
       return FALSE ; 
      }
     }
     GetFileFromFTP( sTempFtpPath, sLocalTemp, ftpAdd, ftpUser, ftpPass, sErr ) ;
    }
    else
    {
     sTemp.Empty() ;
     sTemp = FtpFinder.GetFileName();
     sLocalTemp.Empty() ;
     sLocalTemp = LocalPath + "\\" + sTemp ;
     sTemp.Empty() ;
     sTemp = FtpFinder.GetFilePath();//
     CFileStatus   rStatus;
     if( !( CFile::GetStatus( sLocalTemp, rStatus ) ) )
     {//文件不存在,下载之
      if( !( pFtpCon->GetFile( sTemp, sLocalTemp, true, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 1) ) )
      {//下载失败
       DWORD dErr = GetLastError() ;
       sErr.Format( "下载失败: ERROR  %d" ,dErr ) ;
       return FALSE ;
      }
      else
       WriteLog( "下载成功", 1 ) ;
     }
    }
   }
   FtpFinder.Close() ;
      }      
 }
 catch (CInternetException * pEx)
 {
  TCHAR szError[1024];
  pEx->GetErrorMessage(szError,1024) ;
  sErr.Format( "连接FTP失败:%s", pEx ) ;
  pEx->Delete();
  pFtpCon=NULL;
  return FALSE ;
 }
 return TRUE ;
}
阅读(2266) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~