C++ libcurl自动将换行符替换为换行符+;回车
正如标题所说,当下载一些东西并保存libcurl时,将所有LF替换为LF+CR。这对于文本文档来说很好。但对binary来说,这是一场灾难。我已经试过了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
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");
谢谢你指出我愚蠢的错误。这解决了我的问题