⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geohttpdown.cpp

📁 类似flashget下载工具代码 本来想在完善了上传的
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			BreakLength0=m_stHttpDlInfo.BreakInfo0.BreakLength0;
			BreakLength1=m_stHttpDlInfo.BreakInfo1.BreakLength1;
			BreakLength1-=LOffet;  //这样计算可以得到子线程实际下载的字节数
			BreakLength2=m_stHttpDlInfo.BreakInfo2.BreakLength2;
			BreakLength2-=LOffet*2;
			BreakLength3=m_stHttpDlInfo.BreakInfo3.BreakLength3;
			BreakLength3-=LOffet*3;
			BreakLength4=m_stHttpDlInfo.BreakInfo4.BreakLength4;
			BreakLength4-=LOffet*4;

			nCompletedSize=BreakLength0+BreakLength1+BreakLength2+BreakLength3+BreakLength4;
		    //保存下在完成数
			m_stHttpDlInfo.CFG->CFG_SetInt("COMPLETEDSIZE",nCompletedSize);
			
			//finish = nCompletedSize;
			if(nCompletedSize<=FileLength && nCompletedSize>0)
			{
				//---计算已完成的百分比---
				dwCompleted=nCompletedSize;
				dwCompleted/=1024;
				dwPercent=FileLength;
				dwPercent/=1024;
				dwPercent=dwCompleted*100/dwPercent;
		        sTemp="";
				sTemp.Format("%ld",dwPercent);
				sTemp+="%";
				
				WriteDownLoadLog(m_DownInfo->nPID,2,sTemp);
				//保存下载百分比
				m_stHttpDlInfo.CFG->CFG_SetString("PERCENT",sTemp);
                //计算下载速度
				//单位时间内线程下载字节数和
				m_stHttpDlInfo.fSpeed = m_stHttpDlInfo.BreakInfo0.lSpeed0 +
				m_stHttpDlInfo.BreakInfo1.lSpeed1+m_stHttpDlInfo.BreakInfo2.lSpeed2+
				m_stHttpDlInfo.BreakInfo3.lSpeed3+m_stHttpDlInfo.BreakInfo4.lSpeed4;
				mmSpeed=(long)(m_stHttpDlInfo.fSpeed);
			
				sTemp="";
				long lSpeed=mmSpeed;
				if(lSpeed>=1024L)
				{
					lSpeed/=1024L;
					sTemp="";
					sTemp.Format("%ldkb/s",lSpeed);
					WriteDownLoadLog(m_DownInfo->nPID,6,sTemp);
				}
				else
				{
					sTemp="";
					sTemp.Format("%ldb/s",lSpeed);
					WriteDownLoadLog(m_DownInfo->nPID,6,sTemp);
				}
			}
		    

			    //---计算剩余时间---
				long lbps=mmSpeed; //xxbyte/s
				if(lbps>0L)
				{
				   long lComp=FileLength-nCompletedSize;         //lComp xxbps
				   long elhh,elmm,elss;
				   CalueSpareTimer(elhh,elmm,elss,lComp,lbps);
				   m_stTimeList.eHH=(int)elhh;
				   m_stTimeList.eMM=(int)elmm;
				   m_stTimeList.eSS=(int)elss;
				   sTemp="";
				   char sz[9];
				   FormatTime(m_stTimeList.eHH,m_stTimeList.eMM,m_stTimeList.eSS,sz);	
				   WriteDownLoadLog(m_DownInfo->nPID,5,sz);	
				}	
		    //break;
		}
		   }//if
		   else //断点下载 
		   {
		     
		    //设置下载百分比和速率
		    long FileLength=m_stHttpDlInfo.lFileLength;   //文件总长度
		    long BreakLength0,BreakLength1,BreakLength2,BreakLength3,BreakLength4;  //5个子线程已经下载完的字节数
		    long nCompletedSize;  //已经下载完的总字节数
	        //long nCompletedSize;  //已经下载完的总字节数
		    long dwPercent,dwCompleted;  //已完的百分比,已经下载完的总字节数
		    long mmSpeed;  //每秒下载的字节数(xxkb/s)
		    CString sTemp;
		    if(FileLength>0L)
			{  
		
               long LOffet=FileLength/5L;
	           m_stHttpDlInfo.fSpeed =0.00;
			   BreakLength0=m_stHttpDlInfo.BreakInfo0.BreakLength0;
			  
			   BreakLength1=m_stHttpDlInfo.BreakInfo1.BreakLength1;
			   BreakLength1-=LOffet;  //这样计算可以得到子线程实际下载的字节数
			   BreakLength2=m_stHttpDlInfo.BreakInfo2.BreakLength2;
			   BreakLength2-=LOffet*2;
			   BreakLength3=m_stHttpDlInfo.BreakInfo3.BreakLength3;
			   BreakLength3-=LOffet*3;
			   BreakLength4=m_stHttpDlInfo.BreakInfo4.BreakLength4;
			   BreakLength4-=LOffet*4;
			   nCompletedSize=BreakLength0+BreakLength1+BreakLength2+
				              BreakLength3+BreakLength4;
		       
			    //保存下在完成数
			  m_stHttpDlInfo.CFG->CFG_SetInt("COMPLETEDSIZE",nCompletedSize);
			  nCompletedSize+=m_stHttpDlInfo.Completed;
			  //finish = nCompletedSize;
		
			   if(nCompletedSize<=FileLength && nCompletedSize>0)
				{
					//---计算已完成的百分比---
					dwCompleted=nCompletedSize;
					dwCompleted/=1024;
					dwPercent=FileLength;
					
					dwPercent/=1024;
					dwPercent=dwCompleted*100/dwPercent;
					sTemp="";
					sTemp.Format("%ld",dwPercent);
					sTemp+="%";
					
					WriteDownLoadLog(m_DownInfo->nPID,2,sTemp);
					//保存下载百分比
					m_stHttpDlInfo.CFG->CFG_SetString("PERCENT",sTemp);
					//计算下载速度
					//单位时间内线程下载字节数和
					//判断数据有有效性(这样计算,以为有可能有线程已经下载完毕,不加无效值)
					if(m_stHttpDlInfo.BreakInfo0.lSpeed0>0)
                       m_stHttpDlInfo.fSpeed += m_stHttpDlInfo.BreakInfo0.lSpeed0;
					
					if(m_stHttpDlInfo.BreakInfo1.lSpeed1>0)
                       m_stHttpDlInfo.fSpeed +=m_stHttpDlInfo.BreakInfo1.lSpeed1;
					
					if(m_stHttpDlInfo.BreakInfo2.lSpeed2>0)
                       m_stHttpDlInfo.fSpeed +=m_stHttpDlInfo.BreakInfo2.lSpeed2;
					
					if(m_stHttpDlInfo.BreakInfo3.lSpeed3>0)
                       m_stHttpDlInfo.fSpeed +=m_stHttpDlInfo.BreakInfo3.lSpeed3;
						
					if(m_stHttpDlInfo.BreakInfo4.lSpeed4>0)
                       m_stHttpDlInfo.fSpeed +=m_stHttpDlInfo.BreakInfo4.lSpeed4;	

					mmSpeed=(long)(m_stHttpDlInfo.fSpeed);
				
					sTemp="";
					long lSpeed=mmSpeed;
					if(lSpeed>=1024L)
					{
						lSpeed/=1024L;
						sTemp="";
						sTemp.Format("%ldkb/s",lSpeed);
						WriteDownLoadLog(m_DownInfo->nPID,6,sTemp);
					}
					else
					{
						sTemp="";
						sTemp.Format("%ldb/s",lSpeed);
						WriteDownLoadLog(m_DownInfo->nPID,6,sTemp);
					}

                    
			    //---计算剩余时间---
				long lbps=mmSpeed; //xxbyte/s
				if(lbps>0L)
				{
				   long lComp=FileLength-nCompletedSize;         //lComp xxbps
				   long elhh,elmm,elss;
				   CalueSpareTimer(elhh,elmm,elss,lComp,lbps);
				   m_stTimeList.eHH=(int)elhh;
				   m_stTimeList.eMM=(int)elmm;
				   m_stTimeList.eSS=(int)elss;
				   sTemp="";
				   char sz[9];
				   FormatTime(m_stTimeList.eHH,m_stTimeList.eMM,m_stTimeList.eSS,sz);	
				   WriteDownLoadLog(m_DownInfo->nPID,5,sz);	
				}	
					
			}
			
		}
	}

		   }break;
	}


}
void FormatTime(int ihh,int imm,int iss,char sz[])
{
		char hh[10],mm[10],ss[10];

		if(ihh<10)
		{
			_itoa(ihh,hh,10);
			hh[1]=hh[0];
			hh[0]='0';
			hh[2]='\0';
		}
		else
			_itoa(ihh,hh,10);

		if(imm<10)
		{
			_itoa(imm,mm,10);
			mm[1]=mm[0];
			mm[0]='0';
			mm[2]='\0';

		}
		else
			_itoa(imm,mm,10);

		if(iss<10)
		{
			_itoa(iss,ss,10);
			ss[1]=ss[0];
			ss[0]='0';
			ss[2]='\0';

		}
		else
			_itoa(iss,ss,10);
	
	    sz[0]=hh[0];
		sz[1]=hh[1];
		sz[2]=':';
		sz[3]=mm[0];
		sz[4]=mm[1];
		sz[5]=':';
		sz[6]=ss[0];
		sz[7]=ss[1];
		sz[8]='\0';

}


void CGeoHttpDown::StartClock(WPARAM wParam,LPARAM lParam)
{
   LPCLOCK clock = (LPCLOCK)lParam;
   SetTimer(clock->ID,clock->time,NULL);

}



//获得主机名字
CString GetHostName(const char* url,const char* strObject)
{
        CString host; //主机
	
		CString strurl=url;
		int nPos = strurl.Find(strObject);
		host = strurl.Mid(0,nPos+1);
		//去http://
	    host = host.Mid(7,host.GetLength()-8);
	    return host;

}

//获得引用名字
CString getRefererName(const char* url)
{
        CString Referer;
        CString strurl=url;
		int nPos = strurl.ReverseFind('/');
		Referer = strurl.Mid(0,nPos);
	
        return Referer;
}

//写列表控件下载信息
void WriteDownLoadLog(int item,int subitem,CString log)
{

	//状态
	LPINSERTLISTlog LPLog = new INSERTLISTlog;
    CMainFrame* pMainFrm = (CMainFrame*)AfxGetApp()->m_pMainWnd;
    CMyInsaneBTView* pView = NULL;
	pView = (CMyInsaneBTView*)pMainFrm->GetActiveView();
    LPLog->m_nitem = item;
    LPLog->nSubItem =subitem;
    LPLog->m_Log =  log;
	pView->SendMessage(WM_SETLISTLOG,0,(LPARAM)LPLog);
          
}



//获得下载信息
void GetDownLoadLog(int item,int subitem,CString& log)
{
     
    CMainFrame* pMainFrm = (CMainFrame*)AfxGetApp()->m_pMainWnd;
    CMyInsaneBTView* pView = NULL;
	pView = (CMyInsaneBTView*)pMainFrm->GetActiveView();
    log = pView->m_downlisctr.GetItemText(item,subitem);

}


void CalueFloat(CString &f1,CString &b2,CString ss)
{
	f1=ss.Left(ss.GetLength()-3);
	b2=ss.Right(2);
}

void CalueSpareTimer(long &hh,long &mm,long &ss,long lComp,long lbps)
{
		CString f1,b2,sTemp;
		float fComp,fbps;
		fComp=(float)lComp;
		if(lbps>1024L)
			fComp/=1024.0f;
		fbps=(float)lbps;
		if(lbps>1024L)
			fbps/=1024.0f;
		fComp/=fbps;
		float fss=fComp;
		fss/=60.0f;
	

		sTemp="";
		sTemp.Format("%.2f",fss);
		CalueFloat(f1,b2,sTemp);
		fss=(float)_ttol((LPCTSTR)b2);
		float fmm=(float)_ttol((LPCTSTR)f1);
		fss*=0.01f;
		fss*=60.0f;       //%.0f  12s
		
	
		//Calue "mm"
		fmm/=60.0f;
		sTemp="";
		f1="";
		b2="";
		sTemp.Format("%.2f",fmm);
		CalueFloat(f1,b2,sTemp);
		fmm=(float)_ttol((LPCTSTR)b2);
		float fhh=(float)_ttol((LPCTSTR)f1);
		fmm*=0.01f;
		fmm*=60.0f;   //%.0f    23m

		
		hh=(long)fhh;
		mm=(long)fmm;
		ss=(long)fss;

}

//修改下载完成文件后缀名
void ChangeFileName(CString& sPath)
{   

	CString snew =  sPath.Left(sPath.GetLength()-4);
	CFile::Rename(sPath,snew);
	
         
}

//创建 DOWN_INFO结构
void CGeoHttpDown::create_DownInfo(const map<CString,CString>&CFGMAP)
{
        
       m_DownInfo = new DOWN_INFO();
	   ASSERT(m_DownInfo!=NULL);
	   //无信号
	   m_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
	   
       m_DownInfo->nSocketLinkNum = 3;
       CMainFrame* pMainFrame =(CMainFrame*) AfxGetApp()->m_pMainWnd;
       m_DownInfo->bIsFileDown = false; //断点下载
	   m_DownInfo->nBreakRev = 1;
       //URL
	   m_DownInfo->strLocationUrl = CFGMAP.find("URL")->second;
       m_DownInfo->pMainFrame = pMainFrame; //主框架
       //文件保存路径
	   m_DownInfo->strFilePath =CFGMAP.find("FULLPATH")->second;
       //文件大小
	   CString tmp = CFGMAP.find("FILESIZE")->second;
	   m_DownInfo->lFileLength = (long)atof(tmp.GetBuffer(1));
       //PID
	   tmp = CFGMAP.find("PID")->second;
       m_DownInfo->nPID = (int)atof(tmp.GetBuffer(1));

	   //进度
	   tmp = CFGMAP.find("PERCENT")->second;
	   tmp = tmp.Left(tmp.GetLength()-1);
	   m_DownInfo->fPercent = (float)atof(tmp.GetBuffer(1));
	   

	
       //下载用时
       CString time = CFGMAP.find("USETIME")->second;
	   m_usetime.nPID = m_DownInfo->nPID; 
       SetTime(time);
       m_stHttpDlInfo.time = time;
	   m_stHttpDlInfo.m_HandleStop = CreateEvent(NULL, TRUE, TRUE, NULL);
	   m_stHttpDlInfo.m_Break_handle = CreateEvent(NULL, TRUE, FALSE, NULL);
	   //文件名字
	   tmp = CFGMAP.find("FILENAME")->second;
	   tmp = tmp.Left(tmp.GetLength()-4);
       m_stHttpDlInfo.m_Filename = tmp;
	   //已下载
	   tmp = CFGMAP.find("COMPLETEDSIZE")->second;
	   m_stHttpDlInfo.Completed = (long)atof(tmp.GetBuffer(1));
	   //设置线程断点位置
       tmp = CFGMAP.find("BREAKPOINT0")->second;
	   m_stHttpDlInfo.BreakInfo0.BreakLength0 = (long)atof(tmp.GetBuffer(1));
	   m_stHttpDlInfo.BreakInfo0.lFromeByte = m_stHttpDlInfo.BreakInfo0.BreakLength0;
	   tmp = CFGMAP.find("LENGTH0")->second;
       m_stHttpDlInfo.BreakInfo0.lToByte = (long)atof(tmp.GetBuffer(1));
	 
       tmp = CFGMAP.find("BREAKPOINT1")->second;
	   m_stHttpDlInfo.BreakInfo1.BreakLength1 = (long)atof(tmp.GetBuffer(1));
	   m_stHttpDlInfo.BreakInfo1.lFromeByte = m_stHttpDlInfo.BreakInfo1.BreakLength1;
	   tmp = CFGMAP.find("LENGTH1")->second;
       m_stHttpDlInfo.BreakInfo1.lToByte = (long)atof(tmp.GetBuffer(1));


	   tmp = CFGMAP.find("BREAKPOINT2")->second;
	   m_stHttpDlInfo.BreakInfo2.BreakLength2 = (long)atof(tmp.GetBuffer(1));
	   m_stHttpDlInfo.BreakInfo2.lFromeByte = m_stHttpDlInfo.BreakInfo2.BreakLength2;
	   tmp = CFGMAP.find("LENGTH2")->second;
       m_stHttpDlInfo.BreakInfo2.lToByte = (long)atof(tmp.GetBuffer(1));

       tmp = CFGMAP.find("BREAKPOINT3")->second;
	   m_stHttpDlInfo.BreakInfo3.BreakLength3 = (long)atof(tmp.GetBuffer(1));
	   m_stHttpDlInfo.BreakInfo3.lFromeByte = m_stHttpDlInfo.BreakInfo3.BreakLength3;
	   tmp = CFGMAP.find("LENGTH0")->second;
       m_stHttpDlInfo.BreakInfo3.lToByte = (long)atof(tmp.GetBuffer(1));


       tmp = CFGMAP.find("BREAKPOINT4")->second;
	   m_stHttpDlInfo.BreakInfo4.BreakLength4 = (long)atof(tmp.GetBuffer(1));
	   m_stHttpDlInfo.BreakInfo4.lFromeByte = m_stHttpDlInfo.BreakInfo4.BreakLength4;
	   tmp = CFGMAP.find("LENGTH4")->second;
       m_stHttpDlInfo.BreakInfo4.lToByte = (long)atof(tmp.GetBuffer(1));
      
	   CMainFrame* pFrmMain = (CMainFrame*)m_DownInfo->pMainFrame;
	   m_pView = (CMyInsaneBTView*)pFrmMain->GetActiveView();
	   //m_stHttpDlInfo.CFG = new CBreakPointDown;
	   m_stHttpDlInfo.m_HandleStop = CreateEvent(NULL, TRUE, TRUE, NULL);
	   m_stHttpDlInfo.m_Stop =true;
	   m_stHttpDlInfo.m_HTTPDOWNCLS = this;
	  
	   pFrmMain->m_http_info.push_back(&m_stHttpDlInfo);

}

void CGeoHttpDown::SetTime(CString time)
{
     //00:00:06 HH:MM:SS
     //:HH
     int nPos = time.Find(":");
	 m_usetime.nHH = (int)atof(time.Left(2).GetBuffer(1));
     time = time.Mid(nPos+1,time.GetLength()-nPos);

     //MM
	 nPos = time.Find(":");
	 m_usetime.nMM = (int)atof(time.Left(2).GetBuffer(1));
     time = time.Mid(nPos+1,time.GetLength()-nPos);

     //SS
	 m_usetime.nSS = (int)atof(time.Left(2).GetBuffer(1));
}

//判断下载的文件是否存在
bool FindFile(const char* sPath)
{
     CFileFind Find;
     if(Find.FindFile(sPath))
	 {
	    //文件已经存在,是否删除
        CSureDlg dlg;
		dlg.DoModal();
		if(sure) //删除该文件
		{
			CFile::Remove(sPath);
			return true;
		}
		return false; //不删除,不下载
	 }
     return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -