簡體   English   中英

使用ofstream時,我應該在curl_easy_setopt中作為第三個參數傳遞什么?

[英]What should I pass as third parameter in curl_easy_setopt when using ofstream?

很好

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

但是我不想在其余的代碼中使用ofopen(),因為我使用了ofstream。 所以我嘗試了這個:

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

我不確定第三個參數是否正確,編譯時未顯示任何錯誤,但程序在寫入時崩潰。 那么正確的方法是什么呢?

該參數可以是long型,函數指針,對象指針或curl_off_t,具體取決於特定選項的期望。

為此函數提供的參數與CURLOPT_WRITEFUNCTION CURLOPT_WRITEFUNCTION size_t function( char *ptr, size_t size, size_t nmemb, void *userdata);類似size_t function( char *ptr, size_t size, size_t nmemb, void *userdata);參數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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM