1

这工作正常

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);

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

4

2 回答 2

0

为此函数给出的参数与CURLOPT_WRITEFUNCTION. CURLOPT_WRITEFUNCTION像这样的参数size_t function( char *ptr, size_t size, size_t nmemb, void *userdata);

所以,如果我们假设你有一个大致像这样的 writefunction:

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

于 2013-08-01T12:36:15.970 回答
0

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

于 2013-08-01T12:28:56.780 回答