0

ファイルをダウンロードする方法を見つけようとしていて、ダウンロードが完了するまでプログラムを待機させてから、次のタスクに進みます。この場合、ファイルが存在するかどうかを確認します

#include <stdio.h>
#include <curl/curl.h>
#include <curl/easy.h>
#include <string>
#include <iostream>
#include <stdlib.h>
#include <fstream>

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}
using namespace std;

int main(void) {
    CURL *curl;
    FILE *fp;
    CURLcode res;
    char *url = "http://199.91.153.180/y1plsynnb11g/e9g9mcd3fi5txov/UHC.jar";
    char outfilename[FILENAME_MAX] = "UHC.jar";
    curl = curl_easy_init();
    if (curl) {
        fp = fopen(outfilename,"wb");
        curl_easy_setopt(curl, CURLOPT_URL, "http://199.91.153.180/y1plsynnb11g/e9g9mcd3fi5txov/UHC.jar");
        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);
    }
    ofstream launch;
    launch.open("UHC.jar");
    if (launch.is_open()){
        cout<< "File Downloaded";
    }
    else {
        cout << "Download Failed";
    }
}
4

3 に答える 3

0

write_data の戻り値が間違っていることに気付きました。しかし、それはエラーを引き起こしたはずです...とにかく、試してみてください:

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written * size;
}
于 2013-08-17T06:42:52.337 に答える
0

ofstream を使用して存在するファイルをチェックする際に何が問題であるかに気付きました。ファイルに書き込もうとしていたため、ファイルが空になりました。ofsteam から fstream に変更するだけで、完全に機能します。

于 2013-08-18T01:40:01.890 に答える