没什么技术难度.仅存之以备后用.
//////////////////////////////////////////////////////////////////////////////////
//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;
}
posted on 2007-01-15 13:29
我风 阅读(3286)
评论(2) 编辑 收藏 引用