最近写的一个到指定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) |