在C++中使用libcurl下载多个文件

我正在尝试为我的软件项目创建一个更新程序。我需要它能够下载多个文件,我不介意他们是同步下载还是一个接一个地下载,无论更简单(文件大小不是问题)。我跟着从libcurl的网页以及其他一些资源的例子,这个想出了:在C++中使用libcurl下载多个文件

#include <iostream> 

#include <stdio.h>

#include <curl/curl.h>

#include <string.h>

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {

size_t written;

written = fwrite(ptr, size, nmemb, stream);

return written;

}

int main(void){

for (int i = 0; i < 2;){ //download 2 files (loop twice)

CURL *curl;

FILE *fp;

CURLcode res;

char *url = "http://sec7.org/1024kb.txt"; //first file URL

char outfilename[FILENAME_MAX] = "C:\\users\\grant\\desktop\\1024kb.txt";

curl = curl_easy_init();

if (curl){

fp = fopen(outfilename,"wb");

curl_easy_setopt(curl, CURLOPT_URL, url);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

res = curl_easy_perform(curl);

curl_easy_cleanup(curl);

fclose(fp);

}

url = "http://sec7.org/index.html"; //I want to get a new file this time

outfilename[FILENAME_MAX] = "C:\\users\\grant\\desktop\\index.html";

}

return 0;

}

的第一个问题是,如果我删除新的文件分配(*url = "http://..."),只是尝试循环的下载代码的两倍,该程序只是停止响应。这种情况发生在程序中不止一次调用下载的任何组合中。另一个问题是我无法更改字符数组outfilename[FILENAME_MAX]的值。我觉得这只是我正在做的一些愚蠢的错误,但却没有想到任何解决方案。谢谢!

回答:

  1. 为什么不把它放在函数中并调用它两次?

  2. 你对数组的语法都是错误的,加上循环内的所有变量都是局部的,这意味着它们在每次循环迭代之后被销毁。

  3. 什么显眼的编译器说。那是什么导致你的程序冻结;它陷入了一个无限循环,因为i永远不会是> 2。有关文件名和URL

    void downloadFile(const char* url, const char* fname) { 

    CURL *curl;

    FILE *fp;

    CURLcode res;

    curl = curl_easy_init();

    if (curl){

    fp = fopen(fname, "wb");

    curl_easy_setopt(curl, CURLOPT_URL, url);

    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);

    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

    res = curl_easy_perform(curl);

    curl_easy_cleanup(curl);

    fclose(fp);

    }

    }

    ,并调用它两次:

把你的代码放到一个函数,像这样

downloadFile("http://sec7.org/1024kb.txt", "C:\\users\\grant\\desktop\\1024kb.txt"); 

downloadFile("http://sec7.org/index.html", "C:\\users\\grant\\desktop\\index.html");

的例子功能是非常糟糕的,虽然,这只是一个例子。你应该改变它来返回错误代码/抛出异常,以及类似的东西。

以上是 在C++中使用libcurl下载多个文件 的全部内容, 来源链接: utcz.com/qa/266515.html

回到顶部