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

📄 downloadlist.cpp

📁 wisock应用队列思想实现单线程多任务http下载的类. 实现多文件同时下载,断点续传,流量统计等.
💻 CPP
字号:
#include ".\downloadlist.h"
#include "NetFlowrecoder.h"

CDownloadList::CDownloadList(void)
{
}

CDownloadList::~CDownloadList(void)
{
	//删除队列,未完成.

}

bool CDownloadList::AddTask(LPTSTR lpHost,UINT port,LPCTSTR lpszDownloadUrl,LPCTSTR lpszSavePath,LPTSTR lpszFileName)
{
	DOWNLOADLIST *listnode = new DOWNLOADLIST;

	if( NULL == listnode )
	{
		return false;
	}

	listnode->downloadSocket = new CHttpDownloadSocket();
	if( NULL == listnode->downloadSocket )
	{
		delete(listnode);
		return false;
	}

	listnode->downloadSocket->SetUrl(lpszDownloadUrl);
	listnode->downloadSocket->IniSocket();

	listnode->infoFile = new CInfoFile(lpszFileName);
	if( NULL == listnode->infoFile )
	{
		delete(listnode->downloadSocket);
		delete(listnode );
		return false;
	}

	INFOFILESTATE infoFileState =  listnode->infoFile->OpenFile();
	switch(infoFileState)
	{
	case INFOFILE_EXIST:
	
		listnode->downloadFile = new CDownloadFile();
		
		//把断点状态读取到downloadFile里
		if(false == listnode->infoFile->ReadProcessInfo(listnode->downloadFile))//如果读取出错,则打开新的文件
		{
			listnode->downloadFile = new CDownloadFile(lpszSavePath,lpszFileName);
		}
		else
		{
			listnode->state = DONWLOAD_RESUME;//断点续传状态
		}

		listnode->downloadFile->OpenFile();
		printf("%d \n",listnode->downloadFile->m_iCurOffset);
	//	CNetFlowRecoder *netFlow = CNetFlowRecoder::GetInstance();
	//	netFlow->AddTotalFlow(
		fseek(listnode->downloadFile->m_pFile,listnode->downloadFile->m_iCurOffset,SEEK_SET );
		break;
	case INFOFILE_NO_EXIST:
		listnode->state = DOWNLOAD_ESTABLISHED;
		listnode->downloadFile = new CDownloadFile(lpszSavePath,lpszFileName);
		listnode->downloadFile->OpenFile();
		break;
	case INFOFILE_ERROR:
		break;
	default:
		break;

	}

	if( NULL == listnode->downloadFile )
	{
		delete(listnode->downloadSocket);
		delete(listnode->infoFile);
		delete(listnode );
		return false;
	}


	try
	{
		m_taskList.push_back( listnode );
	}
	catch(...)
	{
		return false;
	}

	return true;
}

bool CDownloadList::RemoveTask(list<DOWNLOADLIST*>::iterator taskIterator)
{
	CDownloadSocket *lpDownloadSocket= (*taskIterator)->downloadSocket;
	CDownloadFile *lpDownloadFile = (*taskIterator)->downloadFile;
//	CInfodFile *lpInfoFile = (*taskIterator)->infoFile;


	//fclose(lpInfoFile->m_pFile);
	//remove(lpInfoFile->)
	delete(lpDownloadSocket);
	delete(lpDownloadFile);
	delete(*taskIterator);

	return true;
}

⌨️ 快捷键说明

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