a
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
// 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_)
|
||||
Reference in New Issue
Block a user