libcurl使用换行符+回车

时间:2015-07-22 15:23:58

标签: c++ codeblocks libcurl

正如标题所说,在下载内容并保存libcurl时,用LF + CR替换所有LF。它适用于文本文档。但对二进制而言,这是一场灾难。我已经尝试了

curl_easy_setopt(curl, CURLOPT_CRLF, 0L);

如何禁用此功能。我在Windows上运行并卷曲7.40.0

#include <iostream>
#include <curl/curl.h>

using namespace std;

CURL *curl;
CURLcode res;

size_t file_write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
    fwrite(ptr,size,nmemb,(FILE *)userdata);
    return nmemb;
}

int main(void)
{
    FILE * pFile;
    pFile = fopen ("myfile.png","w");

    curl = curl_easy_init();
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.dilushan.tk/Media/128px_feed.png");
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

    if (pFile!=NULL)
    {
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, pFile);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, file_write_callback);
        res = curl_easy_perform(curl);
    }
    fclose (pFile);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

libburl不是罪魁祸首,但底层系统库是。因为Windows有一个二进制文件的概念,其中不应发生转换,并且文本文件的行末端在磁盘上表示为CrLf(\r\n),在C或C ++中仅表示为\n

修复非常简单:只需在b中的模式字符串中使用open(用于二进制):

pFile = fopen ("myfile.png","wb");