libcurl 如何进行下载进度查看
如果,希望能给出经过测试的代码。
包括写文件的确write_func和progress_func回调函数的定义。谢谢。。
[解决办法]
以下是我在VC6下成功运行的程序:
- C/C++ code
#include <stdio.h>#include <curl/curl.h>#include <curl/types.h> /* new for v7 */#include <curl/easy.h> /* new for v7 */size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream){ return fwrite(ptr, size, nmemb, stream);}size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream){ return fread(ptr, size, nmemb, stream);}int my_progress_func(char *progress_data, double t, /* dltotal */ double d, /* dlnow */ double ultotal, double ulnow){ printf("%s %g / %g (%g %%)\n", progress_data, d, t, d*100.0/t); return 0;}int main(int argc, char **argv){ CURL *curl; CURLcode res; FILE *outfile; char *url = "http://curl.haxx.se/download/curl-7.19.5-win32-nossl-sspi.zip"; char *progress_data = "* "; curl = curl_easy_init(); if(curl) { outfile = fopen("a.zip", "wb"); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func); curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE); curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func); curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, progress_data); res = curl_easy_perform(curl); fclose(outfile); /* always cleanup */ curl_easy_cleanup(curl); } return 0;}