Télécharger le fichier en utilisant libcurl en C / C ++

Je construis une application (sur Windows en utilisant Dev-C ++) et je veux qu’elle télécharge un fichier. Je le fais en utilisant libcurl (j’ai déjà installé le code source en utilisant packman). J’ai trouvé un exemple de travail ( http://siddhantahuja.wordpress.com/2009/04/12/how-to-download-a-file-from-a-url-and-save-onto-local-directory-in- c-using-libcurl / ) mais il ne ferme pas le fichier une fois le téléchargement terminé. Je voudrais que quelqu’un donne un exemple sur la façon de télécharger un fichier, soit en c ou en c ++. Merci d’avance!

L’exemple que vous utilisez est faux. Voir la page de manuel pour easy_setopt . Dans l’exemple, write_data utilise son propre fichier FILE *, et non le fichier fp spécifié dans CURLOPT_WRITEDATA. C’est pourquoi la fermeture de fp pose des problèmes – elle n’est même pas ouverte.

C’est plus ou moins ce à quoi ça devrait ressembler (pas de libcurl disponible ici pour tester)

#include  #include  /* For older cURL versions you will also need #include  #include  */ #include  size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written = fwrite(ptr, size, nmemb, stream); return written; } int main(void) { CURL *curl; FILE *fp; CURLcode res; char *url = "http://localhost/aaa.txt"; char outfilename[FILENAME_MAX] = "C:\\bbb.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); /* always cleanup */ curl_easy_cleanup(curl); fclose(fp); } return 0; } 

Mis à jour: comme suggéré par @rsethc types.h et easy.h ne sont plus présents dans les versions actuelles de cURL.

Juste pour ceux qui sont intéressés, vous pouvez éviter d’écrire des fonctions personnalisées en transmettant NULL comme dernier paramètre (si vous n’avez pas l’intention de traiter davantage les données renvoyées).
Dans ce cas, la fonction interne par défaut est utilisée.

Détails
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTWRITEDATA

Exemple

 #include  #include  int main(void) { CURL *curl; FILE *fp; CURLcode res; char *url = "http://stackoverflow.com"; char outfilename[FILENAME_MAX] = "page.html"; curl = curl_easy_init(); if (curl) { fp = fopen(outfilename,"wb"); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); res = curl_easy_perform(curl); curl_easy_cleanup(curl); fclose(fp); } return 0; }