关键部分代码如下:
#include "curl.h"
#pragma comment(lib, "libcurl.lib")
size_t CROS_DownloadDlg::getContentLengthFunc(void * ptr, size_t size, size_t nmemb, void * stream)
{
LONGLONG len = 0;
int r = sscanf((const char *)ptr, "Content-Length:%I64d\n",&len);
if(r)
*((LONGLONG *) stream) = len;
return size * nmemb;
}
//根据URL获取下载文件大小
LONGLONG CROS_DownloadDlg::getDownloadFileSize(const char* url)
{
double lensize = 0.0;
for(int iTry = 0 ; iTry < 3 ; iTry ++)//由于curl_easy_perform可能会有偶发性的 CURLE_WRITE_ERROR错误,所以添加重试机制
{
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, url);
curl_easy_setopt(handle, CURLOPT_HEADER, 1);
curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(handle, CURLOPT_NOBODY, 1);
CURLcode res = curl_easy_perform(handle