C++ libcurl自动将换行符替换为换行符+;回车

C++ libcurl自动将换行符替换为换行符+;回车,c++,codeblocks,libcurl,C++,Codeblocks,Libcurl,正如标题所说,当下载一些东西并保存libcurl时,将所有LF替换为LF+CR。这对于文本文档来说很好。但对binary来说,这是一场灾难。我已经试过了 curl_easy_setopt(curl, CURLOPT_CRLF, 0L); 如何禁用这个东西。我在windows和curl 7.40.0上运行 #include <iostream> #include <curl/curl.h> using namespace std; CURL *curl; CURLco

正如标题所说,当下载一些东西并保存libcurl时,将所有LF替换为LF+CR。这对于文本文档来说很好。但对binary来说,这是一场灾难。我已经试过了

curl_easy_setopt(curl, CURLOPT_CRLF, 0L);
如何禁用这个东西。我在windows和curl 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;
}
#包括
#包括
使用名称空间std;
卷曲*卷曲;
卷曲编码;
大小文件写入回调(char*ptr,大小大小,大小nmemb,void*userdata)
{
fwrite(ptr,size,nmemb,(文件*)userdata);
返回nmemb;
}
内部主(空)
{
文件*pFile;
pFile=fopen(“myfile.png”,“w”);
curl=curl_easy_init();
curl\u easy\u setopt(curl,CURLOPT\u URL,“http://www.dilushan.tk/Media/128px_feed.png");
卷曲位置(卷曲,卷曲位置,1L);
if(pFile!=NULL)
{
curl_easy_setopt(curl,CURLOPT_WRITEDATA,pFile);
curl\u easy\u setopt(curl、CURLOPT\u WRITEFUNCTION、file\u write\u回调);
res=旋度(curl)\u容易执行(curl);
}
fclose(pFile);
返回0;
}

libburl不是罪魁祸首,但底层系统库是罪魁祸首。因为Windows有一个二进制文件的概念,在那里不需要转换,并且文本文件的末尾在磁盘上被表示为CrLf(<代码> \r\n>代码>),而在C或C++中只有<> > \n>代码> .< 修复非常简单:只需在
open
中的模式字符串中使用
b
(对于二进制):

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

谢谢你指出我愚蠢的错误。这解决了我的问题