libcurl 通过http协议下载文件并显示下载进度

vc6 测试工程下载地址: http://download.csdn.net/detail/mtour/8068053


代码如下:


size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
  return fwrite(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://10.10.1.4/d/c00000000000039/2014-10-22/10-28-35.ps";
  char *progress_data = "* ";
 
  curl = curl_easy_init();
  if(curl)
  {
    outfile = fopen("test.ps", "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_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;
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用libcurl库来实现下载进度的跟踪。下面是一个使用libcurl下载文件显示进度的示例代码: ```c #include <stdio.h> #include <curl/curl.h> // 回调函数,用于跟踪下载进度 int progress_callback(void* clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) { // 计算下载进度百分比 double progress = dlnow / (double)dltotal * 100.0; printf("下载进度: %.2f%%\r", progress); fflush(stdout); // 刷新输出缓冲区 return 0; } int main() { CURL* curl; CURLcode res; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if (curl) { // 设置下载地址 curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/file_to_download"); // 设置进度回调函数 curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, progress_callback); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L); res = curl_easy_perform(curl); if (res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } curl_global_cleanup(); return 0; } ``` 在上面的示例中,我们首先定义了一个名为`progress_callback`的回调函数,该函数在每个下载进度数据更新时被调用。然后,在主函数中,我们使用`curl_easy_setopt`函数设置了进度回调函数,并通过`curl_easy_perform`函数开始下载。 当你运行上述代码时,它将显示下载进度,类似于以下输出: ``` 下载进度: 50.00% ``` 你可以根据需要自定义进度显示的格式和其他操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值