使用ofstream时,我应该在curl_easy_setopt中作为第三个参数传递什么?

时间:2013-08-01 12:21:49

标签: c++ file-io libcurl ofstream

这没关系

FILE *outfile = fopen(resultPath.c_str(), "w");
curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);

但我不想使用fopen(),因为我在其余的代码中使用了ofstream。 所以我尝试了这个:

ofstream outfile;
outfile.open(resultPath.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile.beg);

我不确定第三个参数是否正确,编译时是否显示错误,但程序在写入时崩溃。 那么这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

  

该参数可以是long,函数指针,对象指针或   curl_off_t,具体取决于具体选项的期望。

答案 1 :(得分:0)

此函数的参数与CURLOPT_WRITEFUNCTION有关。 CURLOPT_WRITEFUNCTION采用类似size_t function( char *ptr, size_t size, size_t nmemb, void *userdata);

的参数

所以,如果我们假设你的写函数大致如下:

size_t write_data( char *ptr, size_t size, size_t nmemb, void *userdata);
{
    ofstream& outstream = ???; 
    ... 
    outstream.write(ptr, size * nmemb);
    ... 
}

然后userdata应该是您可以创建ofstream&的内容。

我会传递outfile的地址。

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &outfile);

然后write_data函数变为:

size_t write_data( char *ptr, size_t size, size_t nmemb, void *userdata);
{
    ofstream& outstream = *reinterpret_cast<ofstream*>(userdata); 
    ... 
    outstream.write(ptr, size * nmemb);
    ... 
}

参考:http://curl.haxx.se/libcurl/c/curl_easy_setopt.html