111 lines
3.7 KiB
C++
111 lines
3.7 KiB
C++
// DownloadFile.h: interface for the CFileTransfer_crul class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
//导入libcurl库----------------------------------------------------------
|
|
|
|
#define CURL_STATICLIB
|
|
|
|
#ifdef _DEBUG
|
|
#pragma comment(lib,"libcurl_a_debug.lib")
|
|
#else
|
|
#pragma comment(lib,"libcurl_a.lib")
|
|
#endif
|
|
|
|
|
|
#pragma comment ( lib, "ws2_32.lib" )
|
|
#pragma comment ( lib, "winmm.lib" )
|
|
#pragma comment ( lib, "wldap32.lib" )
|
|
#pragma comment ( lib, "Advapi32.lib")
|
|
|
|
#include "./curl/curl.h"
|
|
|
|
|
|
#if !defined(AFX_DOWNLOADFILE_H__9E1240AF_55EA_4F75_8220_B9D763C0CDAB__INCLUDED_)
|
|
#define AFX_DOWNLOADFILE_H__9E1240AF_55EA_4F75_8220_B9D763C0CDAB__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
typedef enum
|
|
{
|
|
OPT_URL_ADDRESS = 0,
|
|
OPT_DOWNLOAD_PATH,
|
|
OPT_DOWNLOAD_NAME,
|
|
OPT_NEED_PROGRESS,
|
|
OPT_NEED_ERRORINFO,
|
|
OPT_TIMEOUT,
|
|
OPT_HTTPS_ACCESS,
|
|
OPT_SSL_CERTIFY
|
|
}EnOptFlag;
|
|
|
|
typedef struct ST_CALLBACK_WRITE_INFO
|
|
{
|
|
FILE* pFile;
|
|
void* pFileTrans;
|
|
ST_CALLBACK_WRITE_INFO()
|
|
{
|
|
pFile = NULL;
|
|
pFileTrans = NULL;
|
|
}
|
|
}STWriteInfo;
|
|
|
|
//目前的传输方法只限制于单线程
|
|
class CFileTransfer_crul
|
|
{
|
|
public:
|
|
// BOOL GetFileList(char *f_buff);
|
|
DOUBLE GetFileSize();
|
|
static inline DOUBLE GetRecvSize() { return m_RecvFileSize; };
|
|
bool DownloadFile();
|
|
void SetOption(EnOptFlag enFlag, CString strInfo, bool bFlag = false);
|
|
bool Inital(); //对crul的信息进行初始化以及进行版本检查
|
|
void UnInital();//
|
|
void PrintLog(CString strLog);
|
|
//获取下载文件的文件总大小
|
|
inline curl_off_t GetFileTotalSize(){return m_lTotalRecvFileSize;}
|
|
//获取下载文件的已经下载的大小
|
|
inline curl_off_t GetCurDownloadSize(){return m_lCurRecvSize;}
|
|
//获取下载的文件的文件名
|
|
inline void GetFileName(CString &strFileName){strFileName = m_strSaveName;}
|
|
//初始化日志信息
|
|
void InitalLogInfo();
|
|
//对目标Url的返回值进行有效性判断
|
|
bool GetUrlResConValild();
|
|
CFileTransfer_crul();
|
|
virtual ~CFileTransfer_crul();
|
|
|
|
protected:
|
|
CURL *m_pCrEasyHandl;
|
|
CURL *m_pCrPuteasyHandl;
|
|
// FILE* m_pDownLoadFile;
|
|
FILE* m_pLog;
|
|
CString m_strUrl; //设置目标文件的下载地址
|
|
CString m_strSavePath; //设置文件的保存路径
|
|
CString m_strSaveName; //设置目标文件的保存名字
|
|
bool m_bIsNeedProgress; //是否需要显示进度
|
|
bool m_bIsNeedErrInfo; //是否需要显示错误信息
|
|
int m_nTimeOut; //下载的超时时间
|
|
bool m_bIsGobalInitial;
|
|
bool m_bIsHttpsFlag; //是否是https访问
|
|
bool m_bIsSSLCertify; //是否进行SSL验证
|
|
private:
|
|
static VOID SetRecvSize(size_t f_size);
|
|
static size_t WriteToFile( void *ptr, size_t size, size_t nmemb, void *userp);
|
|
//显示进度信息的回调函数,其中dltotal:期望下载的文件的大小,dlnow:已经下载的文件大小
|
|
//ultotal:希望上传的文件的大小 ulnow:目前已经上传的大小
|
|
static int xferinfo(void *p, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow);
|
|
static DOUBLE m_RecvFileSize; //获取当前文件下载的大小
|
|
curl_off_t m_lTotalRecvFileSize; //下载文件的总大小
|
|
curl_off_t m_lCurRecvSize; //当前已经接收的文件大小
|
|
static size_t WriteToBuff( void *ptr, size_t size, size_t nmemb, void *userp);
|
|
//用做URL测试的回调些函数,该函数什么都不操作直接返回,用于代替在URL测试时,直接使用默认的回调函数输出到标准输出时,
|
|
//有时候回写入失败的问题
|
|
static size_t WriteFuncForUrlTest(void *ptr, size_t size, size_t nmemb, void *userp);
|
|
static int m_nWriteFileSize; //获取目标文件的大小
|
|
|
|
};
|
|
|
|
#endif // !defined(AFX_DOWNLOADFILE_H__9E1240AF_55EA_4F75_8220_B9D763C0CDAB__INCLUDED_)
|