libcurl在下载文件

时间:2016-10-09 21:30:11

标签: c++ curl libcurl

libcurl我有点奇怪的问题。实质上,从HTTP服务器下载文件时,它会在文件末尾输出一些垃圾字节。文件为1,710,017字节,而库则写入1,712,128,即2,111。我怀疑它是某种缓冲问题,因为后一个数字是2 ^ 12的倍数(和2 ^ 13,但在其他情况下它符合2 ^ 12的倍数)。额外的数据是从文件的另一部分读取的相应字节数(它似乎每次都从4个地址中的一个读取,全部朝向末尾),或者在一种情况下,字节CD重复2,111次。

相关代码:

std::string url; // defined elsewhere
FILE* data; // initialized elsewhere with option "wb"
CURL* query = curl_easy_init();

curl_easy_setopt(query, CURLOPT_WRITEDATA, data);
curl_easy_setopt(query, CURLOPT_URL, url);
curl_easy_setopt(query, CURLOPT_FOLLOWLOCATION, true);
curl_easy_setopt(query, CURLOPT_SSL_VERIFYPEER, false);

CURLcode res = curl_easy_perform(query);

另外:使用简单的写回调时会出现同样的问题,任何给定的远程服务器都会出现问题,而不仅仅是这个特定的远程服务器。

编辑#1:我只能在Windows上复制它(在具有相同库文件的两台计算机上测试)。它适用于Debian。

编辑#2:在我的笔记本电脑上构建libcurl时也会发生这种情况。为了提供更多背景信息,我使用Windows 10上的VC14环境从MarcHörsken的ZIP(可从官方卷曲下载页面获得)构建。

1 个答案:

答案 0 :(得分:0)

我正在粉碎这个奇怪的VC错误或其他异常行为。重写问题代码以使用fstream代替FILE就可以了。