ftp下载实现
来源:互联网 发布:列车通信网络 编辑:程序博客网 时间:2024/06/05 16:25
没什么技术难度.仅存之以备后用.
////////////////////////////////////////////////////////////////////////////////////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;}
- 实现FTP多线程下载
- 实现FTP多线程下载
- ftp下载实现
- vc实现ftp下载
- ftp下载实现
- ftp下载实现
- 简单实现FTP下载
- Qt实现FTP下载
- 【FTP】批处理实现FTP整站下载
- java实现ftp下载文件
- 转载----实现FTP多线程下载
- 实现FTP多线程下载 (vc)
- 实现ftp多线程下载<一>
- [Python] python实现FTP下载
- 脚本实现FTP远程下载
- expect实现ftp自动下载
- python 实现ftp文件下载
- Python实现下载ftp图片
- 自己对WTL使用中一个小问题的解决方法
- VC 实现当拖动一个文件到程序的图标上时,程序自动启动并打开该文件
- XDAIS算法生成向导使用
- ThreadLocal相关
- D3DXLoadSurfaceFromSurface
- ftp下载实现
- NSLog心得
- java 正则表达式
- java之Thread.sleep(long)与object.wait()/object.wait(long)的区别
- mysql 存储过程 要点
- Duplicate entry '5' for key 'PRIMARY'
- 内存使用情况查看类
- Linux输入子系统
- Linux下安装TexLive