📄 downloadlist.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 + -